一、模块加载器
模块加载器可以让项目按需从服务器获取模块,而不是一次性加载所有模块或包含所有模块的 JS
文件。ECMAScript 6 模块规范定义了浏览器原生支持动态模块加载的最终目标。但现在,仍有很多浏览
器不支持 ES6 模块加载。因此,模块加载器作为某种腻子脚本,可以让客户端实现动态模块加载。
1.1 SystemJS
SystemJS 模块加载器可以在服务器上使用,也可以在客户端使用。它支持所有模块格式,包括 AMD、
CommonJS、UMD 和 ES6;也支持浏览器内转译(考虑到性能,不推荐在大型项目中使用)。
1.2 RequireJS
RequireJS 构建于 AMD 模块规范之上,支持特别旧的浏览器。虽然 RequireJS 经实践证明很不错,
但 JavaScript 社区整体上还是会抛弃 AMD 模块格式。因此不推荐在大型项目中使用 RequireJS。
二、模块打包器
模块打包器可以将任意格式、任意数量的模块合并为一个或多个文件,供客户端加载。模块打包器
会分析应用程序的依赖图并按需排序模块。一般来说,应用程序最终只需要一个打包后的文件,但多个
结果文件也是可以配置生成的。模块打包器有时候也支持打包原始或编译的 CSS 资源。最终生成的文件
可以自执行,也可以多个资源拼接在一起按需执行。
2.1Webpack
Webpack 拥有强大的功能和可扩展能力,是今天非常流行的打包工具。Webpack 可以绑定不同的模
块类型,支持多种插件,且完全兼容大多数模板和转译库。
2.2JSPN
JSPM 是构建在 SystemJS 和 ES6 模块加载器之上的包管理器。JSPM 建议的一个工作流是把所有模
块打包到一个文件,然后通过 SystemJS 加载。可以通过 JSPM CLI 使用这个功能。
2.3 Browserify
Browserify 是稍微有点历史但久经考验的模块打包器,支持 Node.js 的 CommonJS require()依赖
语法。
2.4 Rollup
Rollup 在模块打包能力方面与 Browserify 类似,但内置了摇树优化功能。Rollup 可以解析应用程序
的依赖图,排除没有实际使用的模块。