上一篇
java脚本如何导包?
- 后端开发
- 2025-06-20
- 3076
在JavaScript中,使用
import
语句导入ES6模块(如
import module from 'path'
),Node.js环境也可用
require()
函数加载CommonJS模块(如
const module = require('path')
),浏览器环境需通过“标签引入外部库。
在JavaScript中,“导包”(即模块导入)是管理代码依赖的核心机制,通过模块化实现代码复用和封装,以下是详细指南,涵盖主流方法及注意事项:
ES6 模块(现代标准)
ES6(ECMAScript 2015)引入了原生模块系统,适用于浏览器和Node.js(需配置)。
导出模块
- 命名导出(多个值)
// mathUtils.js export const add = (a, b) => a + b; export const PI = 3.14;
- 默认导出(单个值)
// logger.js const log = (message) => console.log(message); export default log; // 仅能有一个默认导出
导入模块
- 导入命名导出
import { add, PI } from './mathUtils.js'; // 路径需带扩展名 console.log(add(2, 3)); // 输出: 5
- 导入默认导出
import customLogger from './logger.js'; // 名称可自定义 customLogger("Hello!"); // 输出: Hello!
- 混合导入
import customLogger, { PI } from './combinedModule.js';
- 整体导入(命名空间)
import * as math from './mathUtils.js'; console.log(math.add(5, math.PI));
动态导入(按需加载)
// 异步加载模块 const module = await import('./module.js'); module.someFunction();
CommonJS(Node.js传统方式)
Node.js 默认使用 CommonJS 规范(.js
文件)。
导出模块
// utils.js exports.add = (a, b) => a + b; // 命名导出 module.exports = { add }; // 等效写法 // 默认导出(覆盖整个 exports) module.exports = function() { ... };
导入模块
const { add } = require('./utils.js'); // 解构命名导出 const myModule = require('./myModule.js'); // 导入默认导出
注意:浏览器不支持 CommonJS,需通过打包工具(如Webpack)转换。
环境配置
浏览器环境
- 在 HTML 中声明模块类型:
<script type="module" src="main.js"></script>
- 跨域限制:需服务器配置 CORS。
Node.js 环境
- 启用 ES6 模块:
- 文件扩展名改为
.mjs
,或 - 在
package.json
中添加:{ "type": "module" }
- 文件扩展名改为
- 混合使用 CommonJS/ES6:
.cjs
扩展名强制 CommonJS,.mjs
强制 ES6。
工具链支持
-
打包工具(处理兼容与优化)
- Webpack/Rollup:将模块打包为浏览器可执行的单一文件。
配置示例(webpack.config.js):module.exports = { entry: './src/index.js', output: { filename: 'bundle.js' } };
- Babel:转换新语法为旧版兼容代码。
- Webpack/Rollup:将模块打包为浏览器可执行的单一文件。
-
CDN 导入(浏览器直接加载)
<!-- 导入 lodash --> <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script> <script> console.log(_.chunk([1, 2, 3], 2)); // 使用全局变量 _ </script>
最佳实践
- 优先使用 ES6 模块:原生支持,符合语言标准。
- 路径规范:
- 相对路径:
'./utils.js'
(当前目录) - 绝对路径:
'/src/utils.js'
- 包导入:
'lodash'
(需通过 npm 安装)
- 相对路径:
- 避免循环依赖:模块间相互引用可能导致未定义错误。
- 树摇优化(Tree Shaking):打包工具自动删除未使用代码,需使用 ES6 的
export
。
常见问题
- 错误:Cannot use import outside a module
浏览器中未添加type="module"
,或 Node.js 未配置"type": "module"
。 - 错误:跨域请求被阻止
本地文件需通过 HTTP 服务器(如http-server
)运行。 - 如何兼容旧浏览器?
使用打包工具 + Babel 转译为 ES5。
引用说明
本文参考以下权威来源:
- MDN Web Docs:JavaScript 模块
- Node.js 官方文档:模块系统
- ECMAScript 2025 语言规范
提示:实际开发中,结合构建工具(如 Vite、Webpack)可简化流程,提升效率。