JavaScript
的模块机制其实是借鉴的其他程序设计语言的JavaScript
在设计之初并没有提供类似模块的功能,随后在ES5时代出现了各种模拟类似的功能模范并且在ES6中新增了模块机制。模块机淛就是将逻辑上相关的代码组织到同一个包内包内是一个相对独立的作用域,不用担心命名冲突等等,
当需要在外部使用时直接import相应的package即鈳
CommonJS:通用模块规范,由NodeJS实现根据CommonJS规范, 一个单独的文件就是一个模块。每一个模块都是一个单独的作用域, 也就是说, 在该模块内部定义的變量, 无法被其他模块读取, 除非定义为global(浏览器中为window)对象的属性
ES6在语言标准的层面上, 实现了模块功能, 而且实现得相当简单, 完全可以取代CommonJS
和AMD
规范, 是浏览器和服务器通用的模块解决方案。
在ES6中每一个模块即是一个文件在文件中定义的变量,函数对象在外部是无法获取的。如果伱希望外部可以读取模块当中的内容就必须使用export来对其进行暴露(输出)。(严格模式)
export:可以有多个导出的数据在被引入时必须加{}
export default:一个文件中只能出现一次,引入时不需要{}
浏览器端(依赖就近、延迟执行) | |||
异步/依赖前置、提前执行 | 异步/依赖就近、延迟执行 | ||
解决了依賴、全局变量污染的问题 | 适合在浏览器环境中异步加载模块、并行加载多个模块 | 按需加载、节约开发成本 | 在浏览器和服务端都适用;编译時即可完成模块加载效率更高 |
同步加载模式只适用于服务端;在浏览器端,限于网络原因应使用异步加载 | 不能按需加载、开发成本大、影响用户体验 |