微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript 模块化

CJS:Commonjs

Node.js 和基于 Node.js 的其他工具(如 webpack & gulp)采用的就是 Commonjs 规范

为什么浏览器不支持 Commonjs 呢?原因是这个规范是基于 Node.js 的四个环境变量:

  • module
  • exports
  • require
  • global

而浏览器并没有这四个变量。所以只要你提供了这四个变量,就能在浏览器上实现 Commonjs 规范。

所以有了 browserify。browserify 帮助你将 Commonjs 规范的代码编译成浏览器能理解的代码

ESM: ECMAScript Modules

从 ES6 开始,ECMAScript 制定了 JavaScript 的模块化规范。但说实现,兼容性真不理想,除了 Chrome 之外,其他主流浏览器产商都不买账.....所以使用时需要借助外部工具的帮助了,如当下流行的构建工具 webpack。

irstName,lastName,year} from './profile.js';

具体使用方法阮一峰的《ECMAScript 6 入门》里写的很详细,查看更多

上面代码的实质是从fs模块加载 3 个方法,其他方法不加载。这种加载称为“编译时加载”或者静态加载,即 ES6 可以在编译时就完成模块加载,效率要比 CommonJS 模块的加载方式高。

AMD: Asynchronous Module Definition

require.js

  • 提前执行(从 2.0 开始可以延迟执行)
  • 依赖前置

CMD: Common Module Definition

sea.js

  • 延迟执行
  • 依赖就近

UMD: 对 CommonJS 和 AMD 的兼容写法

由于 CommonJS 和 AMD 太常见了,有些库为了同时支持两种规范,则会用一种比较兼容的写法,来导出自己的方法,这种写法就叫 UMD

参考资料

  1. 《js模块化编程之彻底弄懂CommonJS和AMD/CMD!》,
  2. 《AMD 和 CMD 的区别有哪些?》,玉伯,

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐