-
Notifications
You must be signed in to change notification settings - Fork 442
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Webpack 4 不完全迁移指北 #60
Comments
66666 |
666 |
Mark. |
awesome |
webpack 4 中,如果要使用 webpack cli 命令,需要单独再安装 |
six six six six |
6的不行,mark |
很多plugin还用不了,我玩了一下头有点疼啊 |
|
@269378737 试一下 |
广告:基于 webpack 4 的一个项目:https://github.com/dwqs/v2-lazy-list 😄😄😄 |
凑波热度:基于 webpack 4 的一个项目: https://github.com/njleonzhang/web-cached-persistence |
@dwqs 嗯,试了下,挺好用的,谢谢 |
6666 |
1 similar comment
6666 |
码一下 |
凑波热度:基于 webpack 4 的一个项目:https://github.com/fengyun2/webpack4-demo |
|
@TitanCat 谢了 亲测有效 |
感兴趣的是,性能可以提升多少,欢迎升级后的盆友列下数据 |
six six six |
马克 |
总结得不错啊 |
在 webpack 3 发布 之后, webpack 团队向社区承诺,之后 webpack 主版本的迭代会有一个时间比较长且稳定的开发周期。而在2017年8月份的时候,webpack 团队从
master
分支切出了next
分支用于 webpack 4 的开发,经历 5 个月的开发周期之后,webpack 4.0-beta 在 2018年1月 已经 Released 了,不仅兑现了之前的承诺,还带来了诸多新特性,在用户使用的体验上也作了诸多改进。安装
如果需要使用 webpack 4,则需要从
next
分支上安装:不完全迁移指北
环境
不再支持 Node.js 4。
模块类型
webpack 4之前,js 是 webpack 中的唯一模块类型,因而不能有效地打包其它类型的文件。而 webpack 4 则提供了 5 种模块类型:
javascript/auto
: (webpack 3中的默认类型)支持所有的JS模块系统:CommonJS、AMD、ESMjavascript/esm
: EcmaScript 模块,在其他的模块系统中不可用(默认.mjs
文件)javascript/dynamic
: 仅支持 CommonJS & AMD,EcmaScript 模块不可用json
: 可通过require
和import
导入的 JSON 格式的数据(默认为.json
的文件)webassembly/experimental
: WebAssembly 模块(处于试验阶段,默认为.wasm
的文件)此外,webpack 4 中会默认解析
.wasm
,.mjs
,.js
和.json
为后缀的文件。在对应文件的 loader 配置,需要增加
type
字段来指定模块类型:javascript/auto
/javascript/esm
都可以处理 ESM, 但后者会更加严格:import
导入,其它方式(包括命名空间)的导入都会报错对于 WebAssembly 模块:
import()
导入的模块)中使用,在 initial chunks 中是无效的(不利于提升 web 应用的性能)import()
: 动态导入在 webpack 4 中,
import()
会返回一个带命名空间(namespace
)的对象,这对 ES Module 不会有影响,但对于遵循commonjs
规范的模块则会加一层包裹:mode
: 模式配置mode
是 webpack 4 中新增加的参数选项,其有两个可选值:production
和development
。mode
不可缺省,需要二选一:production
模式:watching
process.env.NODE_ENV
的值不需要再定义,默认是production
development
模式:process.env.NODE_ENV
的值不需要再定义,默认是development
sideEffects 设置
webpack 4 在
package.json
中引入了对sideEffects: false
的支持。当模块的package.json
中添加该字段时,表明该模块没有副作用,也就意味着 webpack 可以安全地清除被用于重复导出(re-exports)的代码。JSON
webpack 4 不仅支持本地处理 JSON,还支持对 JSON 的 Tree Shaking。当使用 ESM 语法
import
json 时,webpack 会消除掉JSON Module 中未使用的导出。此外,如果要用 loader 转换 json 为 js,需要设置
type
为javascript/auto
:配置
optimization.splitChunks
和optimization.runtimeChunk
,这提供了细粒度的缓存策略控制module.rules[].resolve
来配置解析,它会与全局配置合并。optimization.minimize
用于控制 minimizing 的开关。 生产模式默认为开,开发模式默认为关。optimization.minimizer
用于配置 minimizers 和选项。options.dependencies
配置将报错sideEffects
可以通过module.rules
覆盖output.hashFunction
可以是一个构造函数,用于自定义 hash 函数。处于性能考虑,也可以提供非加密哈希函数output.globalObject
可以用于配置运行时的全局对象引用.wasm
,.mjs
,.js
和.json
的扩展名顺序查找模块。output.pathinfo
在开发模式下默认是打开的entry
的默认值是./src
,output.path
的默认值是./dist
production
优化
uglifyjs-webpack-plugin
发布 v1,支持 ES2015import()
引用无用代码时导致的奔溃性能
RemoveParentModluesPlugin
的性能for of
代替forEach
;Map/Set
代替Objects
;includes
代替indexOf
移除的功能
module.loaders
loaderContext.options
Compilation.notCacheable
NoErrorsPlugin
Dependency.isEqualResource
NewWatchingPlugin
CommonsChunkPlugin
相关资源
The text was updated successfully, but these errors were encountered: