1月25日,Webpack 发布了 4.0.0-beta.0 版本,做了较大改动。我们第一时间来体验一下。

安装

1
npm install webpack@next webpack-cli --save-dev

Webpack 团队切出了 next 分支来开发 Webpack 4,原有的 master 分支将继续 3.x 版本的维护。

新特性

大幅度提升了构建性能

  • 默认情况下,使用 production 模式时,会使用UglifyJS自动并行处理压缩工作并缓存。

  • 发布了一个新的插件系统(https://github.com/webpack/tapable) ,可以更有效的处理插件。

  • 不再支持 Node 4,从而可以大量使用ES6,对V8引擎也进行了一些优化。

向 parcel 看齐 —— 0配置

在 Webpack 4 中,不再强制要求指定 entry 和 output 路径。webpack 4 会默认 entry 为 ./src,output 为 ./dist

也就是说,我们可以不再需要一个庞杂的 webpack.config.js 了。

提供默认模式选择

现在在 Webpack 中,需要手动选择生产模式(production)和开发模式(development)。

生产模式中,提供了各种各样的优化,如代码压缩、作用域提升、移除未引用代码(tree-shaking)等,同时还引入了一些如 NoEmitOnErrorsPlugin 这样的原本需要手动使用的插件。

开发模式优化了开发速度和开发体验。同样地,在开发模式中,Webpack 4 提供了 path nameseval-source-maps 等功能来优化开发体验和构建速度。

sideEffects 设置 —— 构建体积优化

Webpack 4 提供了 sideEffects 的配置,通过该配置,可以极大幅度地减小打包出的文件的体积,例如,从 lodash-es 中单独导入 export ,大小为223KB,而将该选项配置为 false 后,打包体积仅为 3 KB(压缩后)。

JSON 和 Tree Shaking 的支持

使用 ESModule 语法 导入 JSON 时,Webpack 会从 JSON Module 中移除未用到的部分,从而大幅度减小打包体积。

升级到 UglifyJS2

这意味着可以不再通过转换器,直接使用 ES6 语法。

新的模块类型和 .mjs 的支持

  • javascript/auto: (Webpack 3 默认类型) 支持所有的 Javascript 模块系统:CommonJS、AMD、ESM
  • javascript/esm: EcmaScript 模块,不支持其他所有模块系统( .mjs 文件的默认类型)
  • javascript/dynamic: 仅支持 CommonJS 和 AMD,不支持 EcmaScript 模块
  • json: JSON 数据,可以使用 require 和 import 引入(.json 文件的默认类型)
  • webassembly/experimental: WebAssembly 模块(目前是 .wasm 文件的默认类型)

移除了 CommonsChunkPlugin

Webpack 4 删除了 CommonsChunkPlugin,并默认启用了它的许多功能。此外,对于那些需要细粒度的缓存策略的用户,增加了 optimization.splitChunksoptimization.runtimeChunk 它们更灵活。

支持 WebAssembly

Webpack 现在默认支持 import 和 export 任意本地 WebAssembly 模块。这意味着你可以自己实现 loader 来 import Rust,C++,C 等语言。

其他更新

更详细的内容可以参考官方更新日志:https://github.com/webpack/webpack/releases/tag/v4.0.0-beta.0