Vue项目从webpack3.x升级webpack4不完全指南

栏目: 编程语言 · 发布时间: 5年前

内容简介:前段时间,泡面将自己的一个Vue-cli构建的前端框架从除了上面的这几个,还需要更新下面几个:除了上面几个,还需要额外下载一个:

前段时间,泡面将自己的一个Vue-cli构建的前端框架从 webpack3.x 升级到了 4.x 版本,现在才拉出来记录一下,已备忘之用,也和大家分享一下,以免大家采坑。

原先的环境

  • 项目原先通过 Vue-cli 2.9.3 版本构建,
  • 原先使用的 webpack 3.x 版本

首先需要对基础包进行更新(package.json)

  • webpack 更新到4.x版本,泡面这里更新到了 4.28.3
  • 更新 webpack-dev-server ,泡面更新到了 3.1.14 版本,
  • 安装 webpack-cli ,泡面安装的是 3.2.1 版本

除了上面的这几个,还需要更新下面几个:

  • vue-loader 泡面直接升级到了15版本,
  • eslint-loader 升级到了 1.7.1 ,这个当时在做启动的时候提示了一些错误,所以索性也就升级了.
  • happypack , 泡面使用了多线程加速,所以这个也必须要升级,否则会报错,泡面更新到了 5.0.1
  • html-webpack-plugin , 这个也需要更新,否则会提示错误,泡面这里升级到了 3.2.0

除了上面几个,还需要额外下载一个:

  • mini-css-extract-plugin , 该包是要 替换extract-text-webpack-plugin 来使用,所以后者就遗弃掉了.

接着我们修改一下webpack.base.conf.js,没有使用happypack的这步骤可略过...

泡面这里不知道为什么不能使用happypack来挂载 vue-loader ,否则会提示错误,所以泡面这里将原先的happypack的配置修改回了原先:

...
const vueLoaderConfig = require('./vue-loader.conf')
...
module.exports = {
  ...
    {
      test: /\.vue$/,
        // loader: 'happypack/loader?id=happy-vue'
        loader: 'vue-loader',
        options: vueLoaderConfig
    },
  ...  
}
复制代码

接着来调整webpack.dev.conf.js

首先在合并配置的地方引入 mode

...
  // 开发环境引入
  mode: 'development',
  ...
  module: {
    ...
  }
  devServer: {
    ...
  }
复制代码

webpack4需要手动引入vue-loader插件,因为泡面是从14版本升级到15版本, 点我查看官方文档,如何从 v14 迁移 ,所以这里需要引入:

...
const VueLoaderPlugin = require('vue-loader/lib/plugin')
...
module.export = {
  ...
  plugins: [
    ...
    // 引入vue-loader插件
    new VueLoaderPlugin(),
    ...
    // 同时,泡面注释掉了vue-loader的happypack
    // new Happypack({
    //   id: 'happy-vue',
    //   loaders: [{
    //     loader: 'vue-loader',
    //     options: vueLoaderConfig
    //   }]
    // })
  ]
}
复制代码

接着, 以下插件被废弃掉了,直接注释掉

  • webpack.DefinePlugin
  • webpack.NamedModulesPlugin
  • webpack.NoEmitOnErrorsPlugin

ok, 这个文件就改完了.

接着来修改webpack.prod.conf.js

同开发环境,需要引入 modevue-loader ,一模一样,所以这里不赘述了. 接着,我们需要在配置表里添加 optimization 选项:

...
output: { ...},
// 这里添加
optimization: {
    runtimeChunk: {
      name: 'manifest'
    },
    minimizer: [
      new UglifyJsPlugin({
        cache: true,
        parallel: true,
        sourceMap: config.build.productionSourceMap,
        uglifyOptions: {
          warnings: false
        }
      }),
      new OptimizeCSSPlugin({
      cssProcessorOptions: config.build.productionSourceMap
        ? { safe: true, map: { inline: false } }
        : { safe: true }
    }),
    ],
    splitChunks:{
      chunks: 'async',
      minSize: 30000,
      minChunks: 1,
      maxAsyncRequests: 5,
      maxInitialRequests: 3,
      name: false,
      cacheGroups: {
        vendor: {
          name: 'vendor',
          chunks: 'initial',
          priority: -10,
          reuseExistingChunk: false,
          test: /node_modules\/(.*)\.js/
        },
        styles: {
          name: 'styles',
          test: /\.(scss|css)$/,
          chunks: 'all',
          minChunks: 1,
          reuseExistingChunk: true,
          enforce: true
        }
      }
    }
  },
  plugins: [...]  
复制代码

接着,我们需要引入 mini-css-extract-plugin 插件,并添加到插件里:

...
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
...
plugins: [
  ...
  new MiniCssExtractPlugin({
    filename: utils.assetsPath('css/[name].[contenthash].css')
  }),
  ...  
]
复制代码

然后, 我们需要把废弃掉的插件注释掉:

  • webpack.DefinePlugin
  • UglifyJsPlugin (放到optimization里了)
  • ExtractTextPlugin
  • OptimizeCSSPlugin (放到optimization里了)
  • CommonsChunkPlugin (所有的...)

ok, 至此该文件就调整完了.

最后一个utils.js

这里主要是需要添加 mini-css-extract-plugin 插件

...
// 注释掉原来的插件
// const ExtractTextPlugin = require("extract-text-webpack-plugin");
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
...
// 找到:
// return ExtractTextPlugin.extract({
//   use: loaders,
//   fallback: "vue-style-loader",
//   publicPath: '../../'
// });
// 改为:
return [MiniCssExtractPlugin.loader].concat(loaders)
复制代码

ok, 大功告成! 至此webpack4的配置文件就全部修改完成了.

目前, 泡面至在此记录流水账,回头性能测试再发文章记录.

ps: 如果出现这种错误

error: [vue-loader] vue-template-compiler must be installed as a peer dependency, or a compatible compiler implementation must be passed via options.
复制代码

请重新安装一下 vue-template-compiler

完!碎觉~

文章参考:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming in Haskell

Programming in Haskell

Graham Hutton / Cambridge University Press / 2007-1-18 / GBP 34.99

Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduc......一起来看看 《Programming in Haskell》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具