vue-ci项目 webpack3.x升webpack4.x

本文记录了将Vue项目从Webpack3.x升级到Webpack4.x的过程,包括升级的步骤、关键配置变更,如mode、optimization的使用,以及MiniCssExtractPlugin替代extract-text-webpack-plugin等。升级后项目打包速度提升且包体积减小。
摘要由CSDN通过智能技术生成

老板要求将之前的vue项目升级一下版本,也就是webpack4.x版本,对于从来没有升级过项目的本人来说是个不小的挑战。
在此之前已经研究了一天的webpack4.x文档,说实话文档真的不容易吃透,还要慢慢摸索。

0配置
相比于webpack3,webpack4可以零配置运行,即webpack4的0配置也只是支持了默认entry 和 output而已,即默认entry为./src,默认output为/dist。

模式mode
就是相比于webpack3,webpack4新增了一个mode配置选择,用来表示配置模式的选择情况,也就是生产环境production、开发环境devolopment和自定义none这三个选择可选

optimization
webpack4.x已经移除了commonchunk插件,改用了optimization属性,运用起来就很灵活了。具体列子可以去官方文档上面看~

开始升级
1.首先node版本要>=8.9.4,我的版本目前是8.10.0,主要还是es6语法增多,得到新的原声支持。
2.webpack4.x版本需要安装webpack-cli
3.升级主要部件 webpack、webpack-bundle-analyzer、webpack-dev-server、webpack-merge
cnpm install -D webpack webpack-cli webpack-bundle-analyzer webpack-dev-server webpack-merge 如果这样安装在package里面版本没及时更新,那就先卸载之前的在重新安装
3.升级插件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,这个非常重要。cnpm uninstall -D vue-loader 我现在是14.4.2版本
5.卸载插件extract-text-webpack-plugin,webpack4.x已经不需要这个了,所以配置中的这个都可以删除了,然后安装mini-css-extract-plugin插件代替,具体用法什么的可以去官方文档上面去看。
6.如果有的小伙伴用到happypack插件进行多线程打包,一定要升级happypac!!!!!!!(重点,不然会报 'length’的错误)

配置
webpack.base.config.js
增加node:process.env.NODE_ENV 即
module.exports = {
mode: process.env.NODE_ENV,
},
去掉const ExtractTextPlugin = require(‘extract-text-webpack-plugin’)
安装const MiniCssExtractPlugin = require(‘mini-css-extract-plugin’)
对应的

{
                test: /\.css$/,
                use: ExtractTextPlugin.extract({
                    use: ['css-loader?minimize', 'autoprefixer-loader'],
                    fallback: 'style-loader'
                })
            },
            {
                test: /\.less$/,
                use: ExtractTextPlugin.extract({
                    use: ['css-loader?minimize', 'autoprefixer-loader', 'less-loader'],
                    fallback: 'style-loader'
                })
            },

修改成

{
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          {loader: 'css-loader'}
        ]
      },
      {
        test: /\.less$/,
        use: [
          MiniCssExtractPlugin.loader,
          {loader: 'css-loader'},
          {loader: 'less-loader'}
        ]
      },

然后这是我整个文件:

const path = require('path')
const os = require('os')
const webpack = require('webpack')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const HappyPack = require('happypack')
require('babel-polyfill')
var happyThreadPool = HappyPack.ThreadPool({size: os.cpus().length})
function resolve (dir) {
  return path.join(__dirname, dir)
}


module.exports = {
  mode: process.env.NODE_ENV,
  entry: {
    main: ['babel-polyfill', '@/main'],
    'vender-base': '@/vendors/vendors.base.js',
    'vender-exten': '@/vendors/vendors.exten.js'
  },
  output: {
    path: path.resolve(__dirname, '../dist')
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: {
          loaders: {
            css: 'vue-style-loader!css-loader',
            less: 'vue-style-loader!css-loader!less-loader'
          },
          postLoaders: {
            html: 'babel-loader'
          }
        }
      },
      {
        test: /iview\/.*?js$/,
        loader: 'happypack/loader?id=happybabel',
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值