比较

webpack 并非唯一的模块打包器。如果您正在选择使用 webpack 或以下任何打包器,这里是 webpack 与当前竞争对手的逐项功能比较。

功能webpack/webpackjrburke/requirejssubstack/node-browserifyjspm/jspm-clirollup/rollupbrunch/brunch
按需加载额外代码块System.import
AMD definedeamdifyrollup-plugin-amd
AMD require
AMD require 按需加载需手动配置
CommonJS exports仅在 define 中封装commonjs-plugin
CommonJS require仅在 define 中封装commonjs-plugin
CommonJS require.resolve-
在 require 中连接 require("./fi" + "le")否♦-
调试支持SourceUrl, SourceMaps不需要SourceMapsSourceUrl, SourceMapsSourceUrl, SourceMapsSourceMaps
依赖19MB / 127 个包11MB / 118 个包1.2MB / 1 个包26MB / 131 个包?MB / 3 个包-
ES2015 import/export (webpack 2)是,通过 es6 模块转译器
require 中的表达式(引导式)require("./templates/" + template)是(所有匹配文件都包含在内)否♦
require 中的表达式(自由式)require(moduleName)需手动配置否♦-
生成单个打包文件是♦
间接 require var r = require; r("./file")否♦-
单独加载每个文件
混淆路径名部分不需要(路径名不包含在打包文件中)
最小化Terseruglify, closure compileruglifyifyuglify-pluginUglifyJS-brunch
多页面构建,带公共打包文件需手动配置需手动配置通过打包算法
多个打包文件需手动配置需手动配置
Node.js 内置库 require("path")node-resolve-plugin-
其他 Node.js 内容process, __dir/filename, global-process, __dir/filename, globalCommonJS 的 process, __dir/filename, globalglobal (commonjs-plugin)-
插件
预处理loaderloader转换插件转译插件转换编译器,优化器
浏览器替换web_modules.web.js、package.json 字段、别名配置选项别名选项package.json 字段,别名选项package.json,别名选项-
可 require 的文件文件系统web文件系统通过插件文件系统或通过插件文件系统
运行时开销243B + 每个模块 20B + 每个依赖 4B14.7kB + 每个模块 0B + 每个依赖 (3B + X)415B + 每个模块 25B + 每个依赖 (6B + 2X)自执行打包文件 5.5kB,完整 loader 和 polyfill 38kB,0 个普通模块,CJS 293B,ES2015 System.register 139B(gzip 前)ES2015 模块无开销(其他格式可能有)-
监听模式不需要watchify开发环境下不需要rollup-watch

♦ 生产模式下(与开发模式相反)

X 是路径字符串的长度

打包 vs. 加载

需要注意*加载*和*打包*模块之间的一些关键区别。像 SystemJS 这样的工具(JSPM 内部使用)用于在浏览器运行时加载和转译模块。这与 webpack 显著不同,webpack 在模块到达浏览器之前,会先对其进行转译(通过“loader”)和打包。

每种方法都有其优缺点。对于包含许多模块的大型网站和应用程序,在运行时加载和转译模块会增加大量开销。因此,SystemJS 更适用于需要较少模块的小型项目。然而,随着 HTTP/2 提升文件从服务器传输到客户端的速度,这种情况可能会有所改变。请注意,HTTP/2 不会改变模块转译的任何内容,客户端转译总是会花费更长时间。

6 贡献者

pksjcebebrawchrisVillanuevatashiansimon04byzyk