commonjs(用于node)
- 每一个文件都是一个模块,有着自己的作用域
- 导入是同步的,通过require导入
- 首次导入会有缓存,后续导入会返回缓存结果(可清除)
- 导出是通过一个module.exports对象,exports初始指向这个module.exports,可以通过exporets导出。
- 导出是值的引用,如果改变这个值,其他文件导入也会发生变化。
- 不可以使用if switch去使用require
esmodule(用于浏览器)
- 每一个文件都是一个模块,有着自己作用域
- 导入是异步的,可以通过
- 默认引入:import A from "data.js"
- 统一导入 import * as A from "data.js"
- 按需导入 import { a, b } from "data.js"
- 多次导入时,只会加载一次
- 编译阶段,import会提升到模块的顶部执行。
- 还有动态导入,返回一个promise
amd(用于浏览器,异步导入)
cmd(commonjs 和amd的结合,适用于浏览器也适用于node,异步导入)
es6既可以使用在浏览器,也可以使用node中。可以取代amd和cmd,在node只需要将导入文件的后缀改成.mjs,以及在package.json文件添加type: 'module'即可。