遵循的模块化规范不一样

模块化规范:即为 JavaScript 提供一种模块编写、模块依赖和模块运行的方案。谁让最初的 JavaScript 是那么的裸奔呢——全局变量就是它的模块化规范。

require/exports 出生在野生规范当中,什么叫做野生规范?即这些规范是 JavaScript 社区中的开发者自己草拟的规则,得到了大家的承认或者广泛的应用。比如 CommonJS、AMD、CMD 等等。import/export 则是名门正派。TC39 制定的新的 ECMAScript 版本,即 ES6(ES2015)中包含进来。

出现的时间不同

require/exports 相关的规范由于野生性质,在 2010 年前后出生。AMD、CMD 相对命比较短,到 2014 年基本上就摇摇欲坠了。一开始大家还比较喜欢在浏览器上采用这种异步小模块的加载方式,但并不是银弹。随着 Node.js 流行和 Browsersify 的兴起,运行时异步加载逐渐被构建时模块合并分块所替代。Wrapper 函数再也不需要了。 2014 年 Webpack 还是新玩意,现在已经是前端必备神器了。

Browsersify、Webpack 一开始的目的就是打包 CommonJS 模块。

 
CommonJS 作为 Node.js 的规范,一直沿用至今。由于 npm 上 CommonJS 的类库众多,以及 CommonJS 和 ES6 之间的差异,Node.js 无法直接兼容 ES6。所以现阶段 require/exports 任然是必要且实必须的。出自 ES6 的 import/export 相对就晚了许多。被大家所熟知和使用也是 2015 年之后的事了。 这其实要感谢 babel(原来项目名叫做 6to5,后更名为 babel) 这个神一般的项目。由于有了 babel 将还未被宿主环境(各浏览器、Node.js)直接支持的 ES6 Module 编译为 ES5 的 CommonJS —— 也就是 require/exports 这种写法 —— Webpack 插上 babel-loader 这个翅膀才开始高飞,大家也才可以称 " 我在使用 ES6! "

这也就是为什么前面说 require/exports 是必要且必须的。因为事实是,目前你编写的 import/export 最终都是编译为 require/exports 来执行的。

 
 

最新文章

  1. laravel5笔记
  2. android copy项目后修改项目名
  3. 《C++ Primer》学习笔记【第三部分 类设计者的工具】
  4. HTML <span> 标签
  5. Tomcat 的使用学习
  6. Dynamic CRM 2013学习笔记(三十)Linq使用报错 A proxy type with the name account has been defined by another assembly
  7. OC的项目网址(自己编写的项目)
  8. 四则运算(2)之软件单元测试:Right-BICEP
  9. 使用GitHub建立自己的个人主页
  10. [html][转]常用返回顶部代码
  11. 1247 排排站 USACO(查分+hash)
  12. update语句的执行步骤及commit语句的执行顺序
  13. win10安装sqlserver2016准备
  14. 在windows系统之中查看目前已安装的更新
  15. poj-2752(拓展kmp)
  16. 关于Kafka broker IO的讨论
  17. 新唐MCU常用的工具软件
  18. gentoo 建立本地软件库并安装软件 Custom repository
  19. 29-2-电容触摸屏控制芯片GT911
  20. zabbix_agentd客户端安装与配置(Linux操作系统)

热门文章

  1. 路由器中带宽设置(Bandwidth) 20MHZ/40MHZ
  2. HDU 5596 ——GTW likes gt——————【想法题】
  3. nyoj 214——单调递增子序列(二)——————【二分搜索加dp】
  4. python内置函数简介
  5. 删除.browserslistrc文件就好了
  6. ThreadPoolExecutor(上篇)
  7. 2018.10.16 NOIP模拟赛解题报告
  8. 1729 单词查找树 2000年NOI全国竞赛
  9. ARM-IoT
  10. hibernate 性能优化之 1+N 问题