VueMastery

科普
require 和 module。require 用来加载某个模块,module 代表当前模块,是一个对象,保存了当前模块需要导出的信息。exports 是 module 上的一个属性,保存了当前模块要导出的接口或者变量,使用 require 加载的某个模块获取到的值就是那个模块使用 exports 导出的值。require加载模块时以module.exports导出的对象为准。重新给exports赋值,相当于exports断掉与module.exports的关联,exports不再指向module.exports,所以实际并不会影响module.exports的导出结果。package.json中不显式指定模块规范类型type字段的话,那么在 js 脚本中可以自己选择commonjs模块化方案或者es6模块化规范,在构建时会自动解析,但是不能两种语法混合,否则会报错。总结:
commonjs模块化规范规定: 每个模块有独立的空间,互不影响,使用require来引入模块对象,module.exports来导出模块对象,exports全局变量是module.exports的一个引用,如果给exports变量重新赋值,module.exports不会受影响,最终导出结果以module.exports导出的对象为准。
ES Modules(ESM)模块化规范 科普
export 命令用于导出模块的对外接口,import 命令用于导入其他模块导出的内容。特点:
Tree Shaking),这种优化可以移除未使用的代码,从而减少最终打包文件的大小。import()语法可以实现动态导入,这对于按需加载代码、减少初始加载时间非常有用。设计的考虑:
对比
CommonJs和ES Module的区别: CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。 CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。 CommonJS 模块的require()是同步加载模块,ES6 模块的import命令是异步加载,有一个独立的模块依赖的解析阶段。
推荐