解决问题
- 全局变量污染
- 依赖混乱
模块化标准
名称 | 简称 | 标准 | 运行环境 | 详细文档 |
---|---|---|---|---|
CommonJS | CMJ | 社区标准 | node环境 | CommonJS文档 |
ES Module | ESM | 官方标准 | node环境、浏览器 | ES Module文档 |
Asynchronous Module Definition | AMD | require.js | 浏览器 | 无 |
Common Module Definition | CMD | sea.js | 浏览器 | 无 |
1. CommonJS
标准类型:社区规范
支持环境:node
依赖类型:动态依赖
1-1. 如何导出
1 | module.exports = 导出的值 |
1-2. 如何导入
注意: 路径只能以
./
或../
开头
1 | require("模块路径") //函数返回模块导出的值 |
2. ES Module
标准类型:官方标准
支持环境:node、浏览器
依赖类型:静态依赖、动态依赖
2-1. 如何导出
ES Module 的导出
ES Module 分为两种导出方式:
- 具名导出(普通导出),可以导出多个
- 默认导出,只能导出一个
一个模块可以同时存在两种导出方式,最终会合并为一个「对象」导出
1 | export const a = 1; //具名,常用 |
注意: 导出代码必须为顶级代码,即不可放到代码块中
2-2. 如何导入
针对具名导出和默认导出,有不同的导入语法
1 | // 仅运行一次该模块,不导入任何内容 |
注意1: 静态导入的代码必须为在代码顶端,也不可放入代码块中
注意2: 静态导入的代码绑定的符号是常量,不可更改
3. 【扩展】AMD
全称是Asynchronous Module Definition,即异步模块加载机制
require.js实现了AMD规范
在AMD中,导入和导出模块的代码,都必须放置在define函数中
1 | define([依赖的模块列表], function(模块名称列表){ |
4. 【扩展】CMD
全称是Common Module Definition,公共模块定义规范
sea.js实现了CMD规范
在CMD中,导入和导出模块的代码,都必须放置在define函数中
1 | define(function(require, exports, module){ |
__END__