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命令是异步加载,有一个独立的模块依赖的解析阶段。
推荐