- 现在所有模块加载定义之间是否有赢家?CommonJS、AMD、UMD、ES6。那么模块加载程序呢,我们应该使用哪一个呢
- ng4上的Angular cli使用SystemJS模块加载器,对吗
如果您正在编写JavaScript,我认为您肯定应该使用ES6模块(ESM)。但是,由于ESM现在在浏览器中的实现方式存在一些限制——仅在Chrome中支持动态导入,而命名模块AFAIK甚至不在规范中——因此您必须使用模块加载程序。我使用SystemJS按需加载模块。不幸的是,它不支持ESM,所以它们首先需要转换为SystemJS支持的任何格式。我选择CommonJS是因为它与NodeJS上使用的格式相同,而且我更熟悉。转换很方便,可以通过TypeScript完成。一旦浏览器完全支持ESM,包括我上面提到的限制,大多数项目将能够删除对SystemJS的依赖。
然而,大多数前端应用程序现在都使用模块捆绑器Webpack。它将ESM模块转换为自己的模块格式(基于CommonJS),因此通常不需要单独的模块加载程序。但是,由于Webpack在构建时无法加载它不知道的模块,如果您需要在运行时加载动态第三方模块,那么您仍然可以使用SystemJS。我正在开发的应用程序就是这样。