[学习笔记]CommonJS和 es6 module区别

无模块时有哪些问题
1.命名冲突
2.无依赖管理

CommonJS 和 es6 module的区别:

CommonJS es6 module
社区制定的模块加载方案 es6标准
用于服务器端 浏览器和服务器通用的模块解决方案
运行时加载 编译时输出接口
输出值的拷贝 输出值的引用,与其对应的值是动态绑定关系
动态语法可写在判断里 静态语法只能写在顶层
顶层this指向当前模块 顶层的this指向undefined

CommonJS 运行时加载 - 只有运行时才能得到这个对象,导致完全没办法在编译时做“静态优化”。
es6 module编译时加载/静态加载 - 在编译时就完成模块加载,效率要比 CommonJS 模块的加载方式高。使得静态分析成为可能。

其它es6 module好处:

  • 将来服务器和浏览器都支持 ES6 模块格式。
  • 将来浏览器的新 API 就能用模块格式提供,不再必须做成全局变量或者navigator对象的属性。
  • 不再需要对象作为命名空间(比如Math对象),未来这些功能可以通过模块提供。



AMD、CMD与CommonJS区别:

  • CommonJS是同步的,用于服务器端,
  • AMD、CMD是异步的,用于浏览器端。

AMD、CMD区别:

  • AMD推崇依赖前置,提前执行。
  • CMD推崇依赖就近,延迟执行。

参考资料

  • https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Modules
  • https://es6.ruanyifeng.com/#docs/module
  • http://www.ruanyifeng.com/blog/2012/10/javascript_module.html
  • https://www.zhihu.com/question/20351507/answer/14859415

你可能感兴趣的:([学习笔记]CommonJS和 es6 module区别)