Javascript模块加载定义和模块加载器的状态

时间:2017-10-27 00:50:16

标签: angular angular-cli amd commonjs es6-module-loader

  1. 现在所有模块加载定义之间是否有赢家? CommonJS,AMD,UMD,ES6。那些模块加载器呢,我们应该使用哪一个呢?
  2. ng4上的Angular-cli使用SystemJS模块加载器,对吗?

1 个答案:

答案 0 :(得分:1)

如果您正在编写JavaScript,我认为您绝对应该使用ES6模块(ESM)。但由于现在在浏览器中实现ESM的方式存在一些限制 - 仅Chrome支持动态导入,而命名模块AFAIK甚至不在规范中 - 您被迫使用模块加载器。我正在使用SystemJS按需加载模块。不幸的是,它也不支持ESM,因此它们首先需要转换为SystemJS支持的任何格式。我选择CommonJS,因为它与NodeJS上使用的格式相同,对我来说更熟悉。 TypeScript可以方便地完成转换。一旦浏览器完全支持ESM,包括我上面提到的限制,大多数项目都能够删除SystemJS依赖。

但是,大多数前端应用程序现在都使用模块捆绑器Webpack。它将ESM模块转换为自己的模块格式(基于CommonJS),因此通常不需要单独的模块加载器。但是由于Webpack无法加载在构建期间不知道的模块,如果您需要在运行时加载动态第三方模块,那么您仍然是SystemJS。就是我正在处理的应用程序的情况。