vue cli升级webapck4总结


Posted in Javascript onApril 04, 2018

webpack4 released 已经有一段时间了,插件系统趋于平稳,适逢对webpack3的打包速度很不满意,因此决定将当前在做的项目进行升级,正好也实践一下webpack4。

新特性

0配置

应该是parcel出来以后,webpack团队意识到其配置确实有点复杂,不太容易上手。so, webapck4 开始支持0配置启动。不过,万变不离其宗,webpack4的0配置也只是支持了默认entry 和 output而已,即默认entry为./src,默认output为/dist。

模式选择mode

mode有两个可选项,production & development。作为必选项,mode是不可缺省的。在production模式下,会默认做一些必要的优化,如代码压缩和作用域提升,还会默认指定process.env.NODE_ENV 为 production。在development模式下,优化了增量构建,支持注释和提示,并且支持 eval 下的 source maps,同时默认指定process.env.NODE_ENV 为 development。

sideEffects

通过该配置可以大幅度减小打包体积。当模块的 package.json 配置sideEffects:false表明该模块没有副作用,也就意味着 webpack 可以安全地清除被用于重复导出(re-exports)的代码。

模块类型

webpack4提供了5种模块类型。

  1. json: 可通过 require 和 import 导入的 JSON 格式的数据(默认为 .json 的文件)
  2. webassembly: WebAssembly 模块,(目前是 .wasm 文件的默认类型)
  3. javascript/auto: (webpack 3中的默认类型)支持所有的JS模块系统:CommonJS、AMD。
  4. javascript/esm: EcmaScript模块(默认 .mjs 文件)。
  5. javascript/dynamic: 仅支持 CommonJS & AMD。

JSON

webpack 4 不仅支持本地处理 JSON,还支持对 JSON 的 Tree Shaking。当使用 ESM 语法 import json 时,webpack 会消除掉JSON Module 中未使用的导出。此外,如果要用 loader 转换 json 为 js,需要设置 type 为 javascript/auto。

optimization

Webpack 4 删除了 CommonsChunkPlugin,并默认启用了它的许多功能。因此webpack4可以实现很好的默认优化。但是,对于那些需要自定义的缓存策略,增加了 optimization.splitChunks 和 optimization.runtimeChunk。具体解释可参考这篇文章,解释得很详细。RIP CommonsChunkPlugin点击预览

手把手升级

我是把原来vue cli的项目做了一下升级,总体来说,升级还算是比较顺利步骤,这里我们分成两步走,首先升级相关依赖的插件,然后优化webapck配置文件。

升级插件

首先要把下面列表的插件升级到对应版本或者最新版本

webpack@4.4.1
css-loader@0.28.10,
extract-text-webpack-plugin@4.0.0-beta.0,
file-loader@1.1.11,
html-webpack-plugin@3.1.0,
optimize-css-assets-webpack-plugin@4.0.0,
url-loader@1.0.1,
vue-loader@14.2.2,
vue-style-loader@4.1.0,
vue-template-compiler@2.5.16,
webpack-bundle-analyzer@2.11.1,
webpack-dev-middleware@3.1.0,
webpack-dev-server@3.1.1,
webpack-hot-middleware@2.21.2

如果遇到其他包报错,应该是升级到最新的就可以解决了。

更新配置文件

webpack.dev.conf.js

dev环境变化不大,毕竟webpack4很大一部分的优化都是针对生产环境的,该文件我们只需要删除一些不再需要的插件既可以。例如:webpack.NamedModulesPlugin、webpack.NoEmitOnErrorsPlugin,其功能webpack4已经默认配置。同时,要设置

mode: 'development'
webpack.production.conf.js

webvpack4中改动最大,影响也最大的就是webpack4使用optimization.splitChunks替代了CommonsChunkPlugin。以前的CommonsChunkPlugin主要用来抽取代码中的共用部分,webpack runtime之类的代码,结合chunkhash,实现最好的缓存策略。而optimization.splitChunks则实现了相同的功能,并且配置更加灵活,具体解释可参考这篇文章,解释得很详细。

mode: 'production',
optimization: {
splitChunks: {
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
chunks: 'initial',
name: 'vendors',
},
'async-vendors': {
test: /[\\/]node_modules[\\/]/,
minChunks: 2,
chunks: 'async',
name: 'async-vendors'
}
}
},
runtimeChunk: { name: 'runtime' }
}

总结

总体来说本次升级还算顺利,不到一天搞定,目前感觉,打包速度大约优化了70%左右,同时打包后的代码体积也有了很大的优化,带来的效果很显著的。

Javascript 相关文章推荐
用JQuery 实现的自定义对话框
Mar 24 Javascript
javascript中length属性的探索
Jul 31 Javascript
JQuery切换显示的效果实例代码
Feb 27 Javascript
随窗体滑动的小插件sticky源码
Jun 21 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
Sep 22 Javascript
JavaScript中prototype为对象添加属性的误区介绍
Oct 15 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
Jul 23 Javascript
iframe中子父类窗口调用JS的方法及注意事项
Aug 25 Javascript
实现隔行换色效果的两种方式【实用】
Nov 27 Javascript
浅析javascript中的Event事件
Dec 09 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
Feb 21 Javascript
javascript实现评分功能
Jun 24 Javascript
JavaScript实现短暂提示框功能
Apr 04 #Javascript
Vue filter介绍及详细使用
Apr 04 #Javascript
在Vue项目中引入腾讯验证码服务的教程
Apr 03 #Javascript
详解如何用babel转换es6的class语法
Apr 03 #Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
Apr 03 #Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
Apr 03 #Javascript
使用react实现手机号的数据同步显示功能的示例代码
Apr 03 #Javascript
You might like
也谈截取首页新闻 - 范例
2006/10/09 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
2016/11/14 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
js读取csv文件并使用json显示出来
2015/01/09 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
JavaScript将数字转换成大写中文的方法
2015/03/23 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
概述BootStrap中role="form"及role作用角色
2016/12/08 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
浅析TypeScript 命名空间
2020/03/19 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
PyQt5实现简易计算器
2020/05/30 Python
python数组循环处理方法
2019/08/26 Python
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
公司前台接待岗位职责
2013/12/03 职场文书
教师岗位聘任书范文
2014/03/29 职场文书
高中家长寄语
2014/04/02 职场文书
股指期货心得体会
2014/09/13 职场文书
公民代理授权委托书
2014/09/24 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
JavaCV实现照片马赛克效果
2022/01/22 Java/Android
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技