值得一看
双11 12
广告
广告

如何导出和导入JS模块

js模块的导出和导入主要有两种方式:1. es模块(esm),使用export和import关键字,支持命名导出、默认导出及整体导入,适用于现代浏览器和node.js(需配置.type=”module”或使用.mjs扩展名);2. commonjs,使用module.exports和require(),主要用于node.js环境。在浏览器中运行es模块需使用<script type=”module”>标签或构建工具。默认导出每个模块仅限一个,导入时可自定义名称,适合主功能或类;命名导出可有多个,导入时需用原名或as重命名,适合多个辅助功能。实际开发中可根据需要混合使用两种导出方式,以提高代码组织的清晰度和灵活性。

如何导出和导入JS模块

导出和导入JS模块,简单来说,就是让你在一个JS文件中编写的代码,可以在另一个JS文件中使用。这就像搭积木,把不同功能的积木块组合起来,构建更复杂的应用。

解决方案

JS模块的导出和导入主要有两种方式:ES模块(ESM)和CommonJS。ESM是现代浏览器的标准,而CommonJS则主要用于Node.js环境。

ES模块 (ESM)

  • 导出: 使用

    export

    关键字。可以导出单个变量、函数、类,也可以导出多个。

    • 命名导出:

      export const myVariable = "hello"; export function myFunction() { ... }
    • 默认导出:

      export default function() { ... }

      一个模块只能有一个默认导出。

  • 导入: 使用

    import

    关键字。

    • 命名导入:

      import { myVariable, myFunction } from "./myModule.js";
    • 默认导入:

      import myDefaultFunction from "./myModule.js";
    • 全部导入:

      import * as myModule from "./myModule.js";

      这样会将模块的所有导出内容作为

      myModule

      对象的属性来访问。

  • 示例:

    // myModule.js
    export const message = "Hello from myModule!";
    export function greet(name) {
    return `Hello, ${name}!`;
    }
    export default class MyClass {
    constructor() {
    this.value = "Default Value";
    }
    }
    // main.js
    import { message, greet } from "./myModule.js";
    import MyClass from "./myModule.js";
    console.log(message); // 输出: Hello from myModule!
    console.log(greet("World")); // 输出: Hello, World!
    const myInstance = new MyClass();
    console.log(myInstance.value); // 输出: Default Value

CommonJS

  • 导出: 使用

    module.exports

    exports

    对象。

    • module.exports = { myVariable, myFunction };
    • exports.myVariable = "hello"; exports.myFunction = function() { ... }
  • 导入: 使用

    require()

    函数。

    • const myModule = require("./myModule.js");

      然后可以通过

      myModule.myVariable

      myModule.myFunction

      来访问导出的内容。

  • 示例:

    // myModule.js
    const message = "Hello from myModule!";
    function greet(name) {
    return `Hello, ${name}!`;
    }
    module.exports = {
    message: message,
    greet: greet
    };
    // main.js
    const myModule = require("./myModule.js");
    console.log(myModule.message); // 输出: Hello from myModule!
    console.log(myModule.greet("World")); // 输出: Hello, World!

为什么我的ES模块在浏览器里跑不起来?

这通常是因为浏览器默认不支持直接运行ES模块,你需要使用构建工具(如Webpack, Parcel, Rollup)对代码进行打包,或者在HTML文件中使用

<script type="module">

标签。

<!DOCTYPE html>
<html>
<head>
<title>ES Module Example</title>
</head>
<body>
<script type="module" src="https://www.php.cn/faq/main.js"></script>
</body>
</html>

注意,使用

<script type="module">

时,你的服务器需要正确配置MIME类型,将

.js

文件作为JavaScript模块提供。

如何在Node.js中使用ES模块?

从Node.js v13.2开始,已经原生支持ES模块。你可以通过以下两种方式启用ES模块:

  1. 使用

    .mjs

    扩展名: 将你的文件保存为

    .mjs

    扩展名,Node.js会将其视为ES模块。

  2. package.json

    中设置

    "type": "module"

    这样,项目中的所有

    .js

    文件都会被视为ES模块。

{
"name": "my-project",
"version": "1.0.0",
"type": "module",
"dependencies": {
// ...
}
}

需要注意的是,一旦启用了ES模块,你就不能再使用

require()

函数来导入CommonJS模块。你需要使用

import()

函数进行动态导入,或者使用

import { createRequire } from 'module';

来创建一个

require

函数。

默认导出和命名导出有什么区别?我应该用哪个?

主要区别在于导入方式和数量限制。

  • 默认导出: 一个模块只能有一个默认导出,导入时可以自定义名称,更简洁。适合导出模块的主要功能或类。
  • 命名导出: 一个模块可以有多个命名导出,导入时必须使用相同的名称(或者使用

    as

    关键字重命名),更清晰,易于维护。适合导出多个相关的功能或常量。

选择哪个取决于你的需求。如果你的模块主要提供一个功能,那么默认导出可能更合适。如果你的模块提供多个功能,那么命名导出可能更清晰。实际上,很多项目会混合使用这两种方式,根据具体情况选择。例如,一个模块可能有一个默认导出的类,以及一些命名导出的辅助函数。

温馨提示: 本文最后更新于2025-08-16 10:39:18,某些文章具有时效性,若有错误或已失效,请在下方留言或联系易赚网
文章版权声明 1 本网站名称: 创客网
2 本站永久网址:https://new.ie310.com
1 本文采用非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
2 本站所有内容仅供参考,分享出来是为了可以给大家提供新的思路。
3 互联网转载资源会有一些其他联系方式,请大家不要盲目相信,被骗本站概不负责!
4 本网站只做项目揭秘,无法一对一教学指导,每篇文章内都含项目全套的教程讲解,请仔细阅读。
5 本站分享的所有平台仅供展示,本站不对平台真实性负责,站长建议大家自己根据项目关键词自己选择平台。
6 因为文章发布时间和您阅读文章时间存在时间差,所以有些项目红利期可能已经过了,能不能赚钱需要自己判断。
7 本网站仅做资源分享,不做任何收益保障,创业公司上收费几百上千的项目我免费分享出来的,希望大家可以认真学习。
8 本站所有资料均来自互联网公开分享,并不代表本站立场,如不慎侵犯到您的版权利益,请联系79283999@qq.com删除。

本站资料仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END
喜欢就支持一下吧
点赞12赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容