基于Vue cli生成的Vue项目的webpack4升级
前面的话
本文将详细介绍从webpack3到webpack4的升级过程
概述
相比于webpack3,webpack4可以零配置运行,打包速度比之前提高了90%,可以直接到ES6的代码进行无用代码剔除,新增的optimization使用简单
在未来,CSS、HTMl和文件都会成为原生模块
【0配置】
webpack4 设置了默认值,以便无配置启动项目
entry 默认值是 ./src/
output.path 默认值是 ./dist
mode 默认值是 production
【模块类型】
webpack4提供了5种模块类型
json: 可通过 require 和 import 导入的 JSON 格式的数据(默认为 .json 的文件)
webassembly: WebAssembly 模块,(目前是 .wasm 文件的默认类型)
javascript/auto: (webpack 3中的默认类型)支持所有的JS模块系统:CommonJS、AMD。
javascript/esm: EcmaScript模块(默认 .mjs 文件)。
javascript/dynamic: 仅支持 CommonJS & AMD。
模式mode
相比于webpack3,webpack4新增了一个mode配置选择,用来表示配置模式的选择情况
module.exports = {
mode: 'production'
}
包括生产环境production、开发环境devolopment和自定义none这三个选择可选
【开发模式】
浏览器调试工具
注释、开发阶段的详细错误日志和提示
快速和优化的增量构建机制
开启 output.pathinfo 在 bundle 中显示模块信息
开启 NamedModulesPlugin
开启 NoEmitOnErrorsPlugin
【生产模式】
启用所有优化代码的功能
更小的bundle大小
去除只在开发阶段运行的代码
关闭内存缓存
Scope hoisting 和 Tree-shaking
开启 NoEmitOnErrorsPlugin
开启 ModuleConcatenationPlugin
开启 optimization.minimize
【none】
禁用所有的默认设置
optimization
从webpack4开始官方移除了commonchunk插件,改用了optimization属性进行更加灵活的配置,下面来介绍optimization下的一些常用配置项
【minimize】
利用unglifyjsWebpackPlugin插件来压缩模块,生产环境下该值默认为true
optimization: {
minimize: false
}
【minimier】
可以使用其他插件来执行压缩功能
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
module.exports = {
//...
optimization: {
minimizer: [
new UglifyJsPlugin({ /* your config */ })
]
}
};
【splitChunks】
webpack4默认使用splitChunksPlugin插件来实现代码分割功能,来替代webpack3中的commonChunksPlugin插件
module.exports = {
//...
optimization: {
splitChunks: {
chunks: 'async',
minSize: ,
minChunks: ,
maxAsyncRequests: ,
maxInitialRequests: ,
automaticNameDelimiter: '~',
name: true,
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
priority: -
},
default: {
minChunks: ,
priority: -,
reuseExistingChunk: true
}
}
}
}
【runtimeChunk】
通过设置 runtimeChunk: true 来为每一个入口默认添加一个只包含 runtime 的 chunk
通过提供字符串值,可以使用插件的预设模式
signal: 创建一个被所有生成的块共享的runtime文件
multiple: 为共同的块创建多个runtime文件
缺省值为false,表示每个入口块默认内嵌runtime代码
runtimeChunk {
name: "runtime"
}
【noEmitOnErrors】
只要在编译时出现错误,就使用noEmitOnErrors属性来跳过emit 阶段,用来替代NoEmitOnErrorsPlugin 插件
【nameModules】
使用可读的模块标识,方便更好的调试。webpack在开发模式下默认开启,生产模式下默认关闭,用来替代 NamedModulesPlugin 插件
module.exports = {
//...
optimization: {
namedModules: true
}
};
升级
下面就基于vue-cli的项目对webpack配置进行升级
1、升级nodejs
使用 webpack4 时,必须保证 Node.js 版本 >= 8.9.4,因为 webpack4 使用了大量的ES6语法,这些语法在 nodejs新版 v8 中得到了原生支持
2、升级webpack主要部件,包括webpack、webpack-bundle-analyzer、webpack-dev-server、webpack-merge
升级的操作很简单,先删除,再安装即可。但要注意的是webpack4版本中 cli 工具分离成了 webpack 核心库 与 webpack-cli 命令行工具两个模块,需要使用 CLI,必安装 webpack-cli 至项目中
cnpm uninstall -D webpack webpack-bundle-analyzer webpack-dev-server webpack-merge
cnpm install -D webpack webpack-cli webpack-bundle-analyzer webpack-dev-server webpack-merge
3、升级webpack相关插件,包括copy-webpack-plugin、css-loader、eslint-loader、file-loader、html-webpack-plugin、url-loader、friendly-errors-webpack-plugin、optimize-css-assets-webpack-plugin、uglifyjs-webpack-plugin
cnpm uninstall -D copy-webpack-plugin css-loader eslint-loader file-loader html-webpack-plugin url-loader friendly-errors-webpack-plugin optimize-css-assets-webpack-plugin uglifyjs-webpack-plugin
cnpm install -D copy-webpack-plugin css-loader eslint-loader file-loader html-webpack-plugin url-loader friendly-errors-webpack-plugin optimize-css-assets-webpack-plugin uglifyjs-webpack-plugin
4、升级vue-loader
由于vue-loader升级到版本15后,配置有较多的变化,稳妥起见,可以只将vue-loader升级到14.4.2
cnpm uninstall -D vue-loader
cnpm uninstall -D vue-loader@14.4.2
5、替换webpack相关插件,extract-text-webpack-plugin替换为mini-css-extract-plugin
cnpm uninstall -D extract-text-webpack-plugin
cnpm install -D mini-css-extract-plugin
配置
下面对配置文件的修改进行详细说明:
1、webpack.base.conf.js文件
增加node:process.env.NODE_ENV即可
module.exports = {
+ mode: process.env.NODE_ENV,
...
2、webpack.prop.conf.js文件
该文件的配置项较为复杂
(1)将ExtractTextPlugin替换为MiniCssExtraPlugin
+ const MiniCssExtractPlugin = require("mini-css-extract-plugin")
- const ExtractTextPlugin = require('extract-text-webpack-plugin')
...
- new ExtractTextPlugin({
+ new MiniCssExtractPlugin({
filename: utils.assetsPath('css/[name].[contenthash].css'),
allChunks: true,
}),
...
(2)删除UglifyJsPlugin配置项
- const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
...
- new UglifyJsPlugin({
- uglifyOptions: {
- compress: {
- warnings: false
- }
- },
- sourceMap: config.build.productionSourceMap,
- parallel: true
- })
(3)删除CommonsChunkPlugin配置项
- new webpack.optimize.CommonsChunkPlugin({
- name: 'vendor',
- minChunks (module) {
- return (
- module.resource &&
- /\.js$/.test(module.resource) &&
- module.resource.indexOf(
- path.join(__dirname, '../node_modules')
- ) ===
- )
- }
- }),
- new webpack.optimize.CommonsChunkPlugin({
- name: 'manifest',
- minChunks: Infinity
- }),
- new webpack.optimize.CommonsChunkPlugin({
- name: 'app',
- async: 'vendor-async',
- children: true,
- minChunks:
- }),
...
(4)添加optimization配置项
+ optimization: {
+ splitChunks: {
+ chunks: 'async',
+ minSize: ,
+ minChunks: ,
+ maxAsyncRequests: ,
+ maxInitialRequests: ,
+ automaticNameDelimiter: '~',
+ name: true,
+ cacheGroups: {
+ vendors: {
+ test: /[\\/]node_modules[\\/]/,
+ priority: -
+ },
+ default: {
+ minChunks: ,
+ priority: -,
+ reuseExistingChunk: true
+ }
+ }
+ },
+ runtimeChunk: { name: 'runtime' }
+ },
详细配置移步前端小站源码
基于Vue cli生成的Vue项目的webpack4升级的更多相关文章
- [转]Vue CLI 3搭建vue+vuex 最全分析
原文地址:https://my.oschina.net/wangnian/blog/2051369 一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@ ...
- Vue CLI 3搭建vue+vuex 最全分析
一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...
- 使用Vue CLI脚手架搭建vue项目
本次是使用@vue/cli 3.11.0版本搭建的vue项目 1. 首先确保自己的电脑上的Node.js的版本是8.9版本或者以上 2. 全局安装vue/cli npm install @vue/cl ...
- Vue Cli 3:vue.config.js配置文件
Vue Cli 3生成的项目结构,没有build.config目录,而是使用vue.config.js来进行配置. vue.config.js 是一个可选的配置文件,如果项目的 (和 package. ...
- Vue CLI UI:Vue开发者必不可少的工具
突然发现一个Vue cli 比较好用的工具,一个可视化图形界面方便你去创建.更新和管理Vue项目.这里分享2个作者写得比较好的文章 https://codeseeding.com/portal.php ...
- vscode vue 模版生成,vue 一键生成
vscode vue 模版 继上篇文章(vue 格式化),顺便记录下 vue 模版生成.图片就不在贴了,如果有找不到 vscode 插件商店的可以访问上篇文章. 一.安装 VueHelper 在 vs ...
- vue cli 中关于vue.config.js中chainWebpack的配置
Vue CLI 的官方文档上写:调整webpack配置最简单的方式就是在vue.config.js中的configureWebpack选项提供一个对象. Vue CLI 内部的 webpack 配置 ...
- vue项目的webpack4.X配置
这两天摆弄webpack,躺过很多坑,直到今天看了一位博主的文章才得以解决.他对配置中的各个部分做说明. 下面的配置99.9%抄自博主: https://www.cnblogs.com/nianyif ...
- Vue CLI Webpack 创建Vue项目
简介 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还 ...
随机推荐
- 105 - kube-scheduler源码分析 - predicate算法注册
一.predicate注册过程 今天我们来聊聊predicate函数是怎么被注册进去的,也就是要执行的一堆predicate是怎么成为“选中的孩子”. 代码位置:pkg/scheduler/fact ...
- C# net request payload形式发送post请求
因为开发微信群发电脑版需要模拟微信POST请求,微信发送消息使用request payload发送,实际发送的是json字符串.我们只需要生成的json字符串和请求的一致,header头完全模拟即可. ...
- DevExpress AspxGridView分页使用隐藏系统默认英文分页
1第一篇文章研究了怎么汉化,但是在实际使用过程中发现汉化的有小问题,DevExpress支持自定义按钮,也可以在属性中设置成中文,这样避免汉化不准确的问题 <dx:ASPxGridView ID ...
- Linux高级运维 第四章 文件的基本管理和XFS文件系统备份恢复
4.1 Linux系统目录结构和相对/绝对路径 4.1.1系统目录结构 在windows系统中,查看文件先进入相应的盘符,然后进入文件目录 在windows中,它是多根 c:\ d:\ e ...
- .NET知识体系(转载)
这篇文章为新手指明的学习方向: https://www.cnblogs.com/mcgrady/p/4725038.html 先生存后发展,先学会选择和使用知识和工具来做东西,然后在研究怎么做的再好一 ...
- MySQL索引初探
一.什么是索引? 帮助数据库系统实现高效获取数据的数据结构 索引可以帮助我们快速地定位到数据而不需要每次搜索的时候都遍历数据库中的每一行. 二.常见实现方式有哪些? 常见索引模型有三种:哈希表.有序数 ...
- npm ERR! asyncWrite is not a function
1.背景:原先node是官网下载安装的,通过brew更新了下,然后到项目里npm i 安装包时候,报错2.解决:卸载官网下载安装的node,重装 sudo rm -rf /usr/local/{bin ...
- SAP HUM 事务代码HUMO为整托做Scrap
SAP HUM 事务代码HUMO为整托做Scrap HUMO事务代码查询结果里,选择某个HU, 回车,过账成功, 2019-04-10 写于苏州市.
- git 提交项目代码到码云步骤 以及出现错误解决办法
git initgit remote add origin 项目地址git add .git commit -m "注释"git push origin master 出现错误 $ ...
- OPPO A7x在哪里开启usb调试模式的详细经验
当我们使用Pc连接安卓手机的时候,如果手机没有开启Usb调试模式,Pc则没法成功读到我们的手机,这时我们需要想办法将手机的Usb调试模式开启,这里我们讲解OPPO A7x如何开启Usb调试模式的方法. ...