Webpack 终于发布了 2.2 版本了,官网也更新了最新的文档。css
先过一下 V2 版本新增的一些特性。node
Tree Shaking
,能够忽略未使用过的 export
方法(这个 V1 的时候就已经经过三方插件实现了,如 babel-plugin-import
)webpack
ES6 modules
,支持原生的 ES6 的模块加载器(和 babel-preset-es2015
一块儿使用时注意关闭其 modules
配置)web
支持 ES6 做代码拆分,并返回 Promise
对象npm
支持异步 js 请求数组
其它babel
npm install webpack
目前安装默认会使用 2.2+
版本了。异步
这边仅列举项目中常见配置的一些变动,更具体的信息请翻阅官方文档。ide
一、 resolve.root
, resolve.fallback
, resolve.modulesDirectories
配置项被 resolve.modules
所替代。post
resolve: { - root: path.join(__dirname, "src") + modules: [ + path.join(__dirname, "src"), + "node_modules" + ] }
二、 resolve.extensions
配置项再也不须要传一个空字符串了。
三、 module.loaders
改为了 module.rules
,虽然 module.loaders
语法依旧保留,可是不建议使用。
module: { - loaders: [ + rules: [ { test: /\.css$/, - loaders: [ + use: [ { loader: "style-loader" }, { loader: "css-loader", - query: { + options: { modules: true } } ] }, { test: /\.jsx$/, loader: "babel-loader", // Do not use "use" here options: { // ... } } ] }
四、 loaders
中由原先!
拼接字符串的写法改成 loader.use
数组。
五、 全部 loader
模块必须带上 -loader
后缀,不能省略。
六、 loader
的参数配置只能写在 rule.options
内部不能写在外面。
七、 ExtractTextWebpackPlugin
改变ExtractTextPlugin 1.0.0
不能在 webpack v2
下工做。 你须要明确地安装 ExtractTextPlugin v2
。
npm install --save-dev extract-text-webpack-plugin@beta
这一插件的配置变化主要体如今语法上。
ExtractTextPlugin.extract
module: { rules: [ test: /.css$/, - loader: ExtractTextPlugin.extract("style-loader", "css-loader", { publicPath: "/dist" }) + loader: ExtractTextPlugin.extract({ + fallbackLoader: "style-loader", + loader: "css-loader", + publicPath: "/dist" + }) ] }
new ExtractTextPlugin({options})
plugins: [ - new ExtractTextPlugin("bundle.css", { allChunks: true, disable: false }) + new ExtractTextPlugin({ + filename: "bundle.css", + disable: false, + allChunks: true + }) ]
loader
默认的 resolve
配置是相对于 context
的,能够不用再使用相似 path.resolve()
的方法来指定目录了
取消了 module.preLoaders
以及 module.postLoaders
更改 UglifyJsPlugin
的 sourceMap
的默认配置为 false
更改 UglifyJsPlugin
的 compress.warnings
的默认配置为 false
UglifyJsPlugin
再也不压缩 loaders
,须要经过设置 minimize:true
。后续版本会逐渐移除
plugins: [ + new webpack.LoaderOptionsPlugin({ + minimize: true + }) ]
ES2015 的代码分割
使用 import()
替代 require.ensure
做为方法来懒加载 chunks
到你的应用中,并返回一个 Promise
对象。这意味着,若是模块加载失败的话,也能够作容错处理。
目前因为这个建议还在 Stage 3,若是你想要同时使用 import
和 Babel
,你须要安装/添加 dynamic-import
语法插件来绕过解析错误。
支持字符串模板和 Promise。
体验下来,版本升级,总体配置文件的改动成本还算小的。若是碰到第三方 loader
对 V2 版本支持不友好的话就要费点脑筋了。可能因为我试验项目中文件内容很少,对于编译速度和打包后的文件大小差异不太明显。
Webpack3 基本上也能够无痛升级,比较大的改动点以下:
做用域提高
魔法注释