美文网首页大前端-万物皆可JS
webpack 3.X - 4.X 之 Big changes

webpack 3.X - 4.X 之 Big changes

作者: 行走的蛋白质 | 来源:发表于2019-07-13 14:40 被阅读0次

    所谓知己知彼百战不殆,在升级前让我们先了解下 webpack4 都做了哪些重大改变以及优化吧。此处只针对我了解的对我有影响有联系的进行翻译说明。更多详细内容参见 webpack4

    白话说区别
    • 新增了 mode 参数来区分开发环境还是生产环境,开发环境侧重于构建的速度,生产环境侧重于打包后的文件大小
      在开发环境中,我们更注重的是如何及时快速的将更新的代码展示在网页上,如何快速定位错误,因此webpack提供了强效source-map和模块热更新的机制来帮助开发人员。在生产环境中,我们需要的是如何让代码包更小、构建更迅速,因此有了轻量级source-map,css代码压缩工具,tree shaking配和js压缩工具等等,都是为了让最后打包出来的代码体量更小。 同样在项目较为复杂的时候也需要将代码进行分包处理,使用异步加载,进一步提高用户使用时的加载速度,同样为了弥补webpack在node中也是单线程加载的原因,还提供了HappyPack,使得webpack能够并行加载。
    • 移除 loaders,必须使用 rules ( 在 3 版本的时候 loaders 和 rules 是共存的但是到4的时候只允许使用rules )
    • 移除了 CommonsChunkPlugin (提取公共代码),用 optimization.splitChunks 和 optimization.runtimeChunk 来代替
    • 支持 es6 的方式导入 JSON 文件,并且可以过滤无用的代码
    • ExtractTextWebpackPlugin 调整,建议选用新的 CSS 文件提取插件 mini-css-extract-plugin,production 模式,增加 minimizer
    官方说区别如下
    Big changes
    • Environment - 环境
      Node.js 4 is no longer supported. Source Code was upgraded to a higher ecmascript version.
      不再支持 Node.js 4。 源码升级到 ecmascript 的更高版本。
    • Usage - 用法
      You have to choose (mode or --mode) between two modes now: production or development
      必须选择( mode 或 --mode )一个模式: 'development' 或 'production' 。
    • Syntax - 语法
      import() always returns a namespace object. CommonJS modules are wrapped into the default export
      import() 总是返回一个对象。CommonJS 模块会被封装在 default 属性中。也就是说之前的 import 写法在升级 webpack4 之后可能导致不兼容。
    • Configuration - 配置
      不再需要以下插件:
      1、NoEmitOnErrorsPlugin- > optimization.noEmitOnErrors(默认情况下在生产模式下启用)
      2、ModuleConcatenationPlugin- > optimization.concatenateModules(默认情况下在生产模式下启用)
      3、NamedModulesPlugin- > optimization.namedModules(默认情况下在开发模式下启用)
      4、CommonsChunkPlugin 被移除掉换成 - > optimization.splitChunks,optimization.runtimeChunk 来配置
    • JSON
    • Optimization 优化
    Big features
    • Modules 模块
    • Optimization 优化
      sideEffects: false is now supported in package.json
      现在在 package.json 中支持 sideEffects 特性,它可以为 tree-shaking 提供更大的优化空间。
    • Syntax 语法
    • Configuration 配置
      optimization.minimize has been added to switch minimizing on/off
      optimization.minimize 可以控制是否压缩
      By default: on in production mode, off in development mode
      默认生产环境压缩,开发环境不压缩。
    • Usage 用法
      Some Plugin options are now validated
      CLI has been move to webpack-cli, you need to install webpack-cli to use the CLI
      The ProgressPlugin (--progress) now displays plugin names
      生效了一些插件选项,必须安装 webpack-cli 来使用CLI,--progress 可以显示插件名称
    • Performance 性能
      UglifyJs now caches and parallizes by default
      UglifyJs 默认缓存和并行,多项优化。
    • Stats 统计
    Features
    • Configuration 配置
      sideEffects can be overriden via module.rules
      sideEffects 可以通过 module.rules 覆盖
    • Runtime 运行
    • Devtool 开发工具
    • Performance 性能
      1、webpacks AST can be passed directly from loader to webpack to avoid extra parsing
      webpacks AST可以直接从loader传递给webpack,以避免额外的解析
      2、Use faster md4 hash for hashing by default
      默认情况下,使用更快的md4哈希
    • Optimization 优化
      When using more than 25 exports mangled export names are shorter.
      当使用超过25个名称导出,名字会压缩的更短
    • Defaults 默认
      1、output.pathinfo is now on by default in develoment mode
      output.pathinfo 默认为开发模式
      2、in-memory caching is now off by default in production
      默认在生产环境关闭缓存
      3、entry defaults to ./src
      入口默认为 ./src
      4、output.path defaults to ./dist
      出口默认为 ./dist
      5、Use production defaults when omiting the mode option
      在没有设置 mode 属性时默认为生产环境
    • Usage 用法
    • Stats 统计
    • Plugins 插件
      done is now an async hook
      done 现在是一个异步钩子
    Bugfixes

    bug修复

    Internal changes

    内部进行了许多优化

    Removed features

    移除下述插件、模块、属性
    removed module.loaders
    removed loaderContext.options
    removed Compilation.notCacheable flag
    removed NoErrorsPlugin
    removed Dependency.isEqualResource
    removed NewWatchingPlugin
    removed CommonsChunkPlugin

    Breaking changes for plugins/loaders

    loader 和 plugin 的变化,原文有很多可点上方连接自行查阅

    • map/foreach Chunks/Modules/Parents methods are now deprecated/removed
      map/foreach Chunks/Modules/Parents 方法现已弃用/删除

    相关文章

      网友评论

        本文标题:webpack 3.X - 4.X 之 Big changes

        本文链接:https://www.haomeiwen.com/subject/jwfpkctx.html