1.webpack 3.11升级4.26
1.webpack 3.11升级4.261.webpack 3.11升级4.26为了提升打包效率,在webpack3.11基础之上做了升级,webpack4.0发布以来,零配置的webpack对项目本身提供的“打包”和“压缩”功能已经做了优化,如果在项目开始使用4.0而不用vue-cli的默认配置,遇到的问题或许能少一些。2. 安装/升级依赖
2. 安装/升级依赖2. 安装/升级依赖这些依赖有的是在build过程中发现依赖有新的替换或者报错,逐步替换的,如果想遇到多个坑,可以先把webpack、webpack-cli升级到对应版本
devDependencies:
"extract-text-webpack-plugin": "^4.0.0-beta.0"
"html-webpack-plugin": "^4.0.0-beta.14"
"mini-css-extract-plugin": "^0.9.0" (旧的optimize-css-assets-webpack不支持了)
"preload-webpack-plugin": "^3.0.0-beta.4"
"script-ext-html-webpack-plugin": "^2.1.3"
"vue-loader": "^15.3.0"
"webpack": "^4.26.1"
"webpack-cli": "^3.1.2"
"webpack-dev-server": "^3.2.1"
"script-ext-html-webpack-plugin": "^2.1.3"
"extract-text-webpack-plugin": "^4.0.0-beta.0"
"html-webpack-plugin": "^4.0.0-beta.14"
"mini-css-extract-plugin": "^0.9.0" (旧的optimize-css-assets-webpack不支持了)
"preload-webpack-plugin": "^3.0.0-beta.4"
"script-ext-html-webpack-plugin": "^2.1.3"
"vue-loader": "^15.3.0"
"webpack": "^4.26.1"
"webpack-cli": "^3.1.2"
"webpack-dev-server": "^3.2.1"
"script-ext-html-webpack-plugin": "^2.1.3"3. 遇到的问题
3. 遇到的问题3. 遇到的问题升级webpack后,build报错:ERROR in ./src/App.vue
Module Error (from ./node_modules/vue-loader/lib/index.js解决:升级vue-loader至15.3.0,webpack.base.conf.js添加
const {VueLoaderPlugin} = require('vue-loader')
module.exports中添加
plugins:[new VueLoaderPlugin()]

const {VueLoaderPlugin} = require('vue-loader')
module.exports中添加
plugins:[new VueLoaderPlugin()]
修改配置文件 webpack.prod.conf.js:webpack.optimize.CommonsChunkPlugin has been removed, please use config.optimization.splitChunks instead.解决:

webpack.prod.conf.js webpackConfig配置:
optimization: {
noEmitOnErrors: true,
concatenateModules: true,
splitChunks: {

chunks: 'all',

name: 'common',
},
runtimeChunk: {

name: 'runtime'
}
}
webpack.prod.conf.js webpackConfig配置:
optimization:{
namedModules: true
},
webpack.prod.conf.js webpackConfig配置:
optimization: {
noEmitOnErrors: true,
concatenateModules: true,
splitChunks: {

chunks: 'all',

name: 'common',
},
runtimeChunk: {

name: 'runtime'
}
}
webpack.prod.conf.js webpackConfig配置:
optimization:{
namedModules: true
},Plugin could not be registered at ‘html-webpack-plugin-before-html-processing'. Hook was not found.解决:

npm i preload-webpack-plugin@next -D
npm i preload-webpack-plugin@next -DTapable.plugin is deprecated. Use new API on .hooks instead问题:extract-text-webpack-plugin兼容问题 ,功能:extract css into its own file解决: 卸载extract-text-webpack-plugin,安装mini-css-extract-plugin
new MiniCssExtractPlugin({

filename: utils.assetsPath('css/[name].[contenthash].css'),

allChunks: false,
}),
new MiniCssExtractPlugin({

filename: utils.assetsPath('css/[name].[contenthash].css'),

allChunks: false,
}),build出错:ERROR in TypeError: Cannot read property ‘hash' of undefined解决:

去掉这段

//打包计时

const SpeedMeasurePlugin = require("speed-measure-webpack-plugin");

const smp = new SpeedMeasurePlugin();

去掉这段

//打包计时

const SpeedMeasurePlugin = require("speed-measure-webpack-plugin");

const smp = new SpeedMeasurePlugin();
WARNING in configuration
The ‘mode' option has not been set, webpack will fallback to ‘production' for this value. Set ‘mode' option to ‘development' or ‘production' to enable defaults for each environment.
You can also set it to ‘none' to disable any default behavior. Learn more: https://webpack.js.org/concepts/mode/
WARNING in configuration
The ‘mode' option has not been set, webpack will fallback to ‘production' for this value. Set ‘mode' option to ‘development' or ‘production' to enable defaults for each environment.
You can also set it to ‘none' to disable any default behavior. Learn more: https://webpack.js.org/concepts/mode/https://webpack.js.org/concepts/mode/解决:webpackConfig添加 mode: ‘production'Tapable.plugin is deprecated. Use new API on .hooks instead解决:
npm i --save-dev extract-text-webpack-plugin@next
npm i --save-dev extract-text-webpack-plugin@next会下载到 extract-text-webpack-plugin@4.0.0-beta
Error: webpack.optimize.CommonsChunkPlugin has been removed, please use config.o ptimization…
解决:

去掉 webpack.optimize.CommonsChunkPlugin相关配置

webpackConfig中与plugins的同级添加
去掉 webpack.optimize.CommonsChunkPlugin相关配置webpackConfig中与plugins的同级添加
optimization: {
splitChunks: {

cacheGroups: {

commons: {

name: "commons",

chunks: "initial",

minChunks: 2

}

}

}
},

optimization: {
splitChunks: {

cacheGroups: {

commons: {

name: "commons",

chunks: "initial",

minChunks: 2

}

}

}
},
Unhandled rejection Error: “dependency” is not a valid chunk sort mode
new HtmlWebpackPlugin({

filename: config.build.index,

template: 'index.html',

inject: true,

minify: {

removeComments: true,

collapseWhitespace: true,

removeAttributeQuotes: true

},

// necessary to consistently work with multiple chunks via CommonsChunkPlugin

chunksSortMode: 'dependency'
}),
new HtmlWebpackPlugin({

filename: config.build.index,

template: 'index.html',

inject: true,

minify: {

removeComments: true,

collapseWhitespace: true,

removeAttributeQuotes: true

},

// necessary to consistently work with multiple chunks via CommonsChunkPlugin

chunksSortMode: 'dependency'
}),解决:chunksSortMode改为auto或者注释至此:npm run build 正常
接下来调npm run dev,直接运行成功4. 总结
4. 总结
4. 总结
开启cache的情况下,原来打包时间22s左右,现在build最快8s左右
升级思路:

卸载webpack旧版本、安装新版本webpack, webpack-cli

遇到loader、plugin报错,升级loader、plugin,有的在4.0不支持,需要换成新的

卸载 ExtractTextPlugin、删除对应配置,改用 mini-css-extract-plugin

配置环境mode

其它wenpack3.0优化配置兼容处理


卸载webpack旧版本、安装新版本webpack, webpack-cli遇到loader、plugin报错,升级loader、plugin,有的在4.0不支持,需要换成新的卸载 ExtractTextPlugin、删除对应配置,改用 mini-css-extract-plugin配置环境mode其它wenpack3.0优化配置兼容处理