下面就是Vue项目从webpack3.x升级webpack4.x的完整攻略。
升级前的准备
在升级之前,我们需要先做好以下准备工作:
- 确定当前项目使用的webpack版本;
- 了解当前使用的webpack配置,包括各个配置项以及对应的含义;
- 相关依赖库的版本是否与webpack4.x兼容,如vue-loader、babel-loader等。
在这个前置知识的基础上,我们就可以开始升级了。
webpack升级方法
大致的升级流程如下:
- 更新webpack及相关loader的版本;
- 修改webpack配置,适配webpack4.x的变化;
- 测试及调整。
下面我将分步骤进行详细讲解。
步骤一:更新webpack及相关loader的版本
首先,我们需要更新webpack及相关loader的版本。将webpack及相关的loader的版本更新至webpack4.x的对应版本。具体对应关系可参考webpack官方文档。
下面是一些常用webpack相关库版本号:
- webpack@4.x
- webpack-cli@3.x
- vue-loader@15.x
- babel-loader@8.x
- css-loader@3.x
- sass-loader@8.x
- postcss-loader@3.x
将这些库的版本号更新后,我们就可以进入下一步了。
步骤二:修改webpack配置
-
webpack配置的模式
-
webpack3.x:
// webpack.conf.js
module.export = {
// ...
plugins: [
new webpack.optimize.UglifyJsPlugin(),
// ...
]
}
- webpack4.x:
// webpack.conf.js
module.export = {
// ...
mode: 'production', // development/production
optimization: {
minimize: true,
minimizer: [new UglifyWebpackPlugin()],
},
// ...
}
-
webpack配置的module规则项
-
webpack3.x:
// webpack.conf.js
module.export = {
module: {
rules: [
// ...
{
test: /\.vue$/,
use: ['vue-loader']
},
// ...
]
},
// ...
}
- webpack4.x:
// webpack.conf.js
module.export = {
module: {
rules: [
// ...
{
test: /\.vue$/,
loader: 'vue-loader'
},
// ...
]
},
// ...
}
- webpack3.x:
// webpack.conf.js
module.export = {
module: {
rules: [
// ...
{
test: /\.js$/,
use: ['babel-loader']
},
// ...
]
},
// ...
}
- webpack4.x:
// webpack.conf.js
module.export = {
module: {
rules: [
// ...
{
test: /\.js$/,
loader: 'babel-loader'
},
// ...
]
},
// ...
}
-
webpack配置的plugins项
-
webpack3.x:
// webpack.conf.js
module.export = {
plugins: [
// ...
new ExtractTextWebpackPlugin('css/[name].css', { allChunks: true }),
// ...
]
}
- webpack4.x:
// webpack.conf.js
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.export = {
plugins: [
// ...
new MiniCssExtractPlugin({ filename: 'css/[name].css' }),
// ...
]
}
以上代码仅是一些简单的示例,具体的修改需根据实际情况进行调整。
步骤三:测试及调整
在修改webpack配置后,我们需要测试一下是否可以正常运行和打包。如果遇到问题,我们则需要根据报错信息,一步步进行调试。
示例
下面是一个简单的示例。
- webpack3.x配置:
// webpack.conf.js
module.export = {
mode: 'development',
entry: './src/main.js',
output: {
filename: 'boundle.js',
path: path.resolve(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: ['babel-loader'],
},
{
test: /\.vue$/,
use: ['vue-loader'],
},
{
test: /\.css$/,
use: ExtractTextWebpackPlugin.extract({
fallback: 'style-loader',
use: ['css-loader', 'postcss-loader'],
}),
},
],
},
plugins: [
new webpack.optimize.UglifyJsPlugin(),
new ExtractTextWebpackPlugin('css/[name].css', { allChunks: true })
],
}
- webpack4.x配置:
// webpack.conf.js
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const UglifyWebpackPlugin = require('uglifyjs-webpack-plugin');
module.export = {
mode: 'production',
entry: './src/main.js',
output: {
filename: 'boundle.js',
path: path.resolve(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
},
{
test: /\.vue$/,
loader: 'vue-loader',
},
{
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'postcss-loader',
],
},
],
},
optimization: {
minimize: true,
minimizer: [new UglifyWebpackPlugin()],
},
plugins: [
new MiniCssExtractPlugin({ filename: 'css/[name].css' }),
],
}
这里主要是由ExtractTextWebpackPlugin
插件改为使用MiniCssExtractPlugin
插件,并且在plugins
项中使用了对应插件的方式进行配置,并且使用了对应版本的UglifyWebpackPlugin
处理js文件。
希望以上内容对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue项目从webpack3.x升级webpack4不完全指南 - Python技术站