旧版vue-cli脚手架Webpack3项目如何升级Webpack4

2023-10-31

 vue-cli脚手架出到了4.3.1版本,目前主推通过create命令来新建项目。与过去的vue-cli2的init命令不同的是:create命令脚手架建完的项目webpack为4,而init采用的模板中引用的webpack版本还是3。(单独安装最新的@vue/cli-init命令安装的webpack版本也是3)
  为了解决构建效率和最新插件兼容性的问题,本篇文章记一下怎样把最开始通过init命令建的webpack3的项目升级为webpack4。

升级依赖

  为了避免手动编辑package.json文件产生包依赖出错的问题,我们通过uninstall和install来更新包。首先更新webpack,打开项目的package.json文件,webpack包是在devDependencies开发依赖中的,所以可以通过如下命令来更新:

npm uninstall webpack
npm install webpack --save-dev
复制代码

  同样方法,需要在开发依赖中更新webpack-dev-server、webpack-cli、vue-loader、eslint-loader、html-webpack-plugin、eslint、eslint-plugin-vue。

调整 webpack.base.conf.js

  Vue Loader v15 现在需要配合一个 webpack 插件才能正确使用,这部分不管调试还是线上构建都是需要的,所以在base配置文件中调整:

//webpack.dev.conf.js
const VueLoaderPlugin = require('vue-loader/lib/plugin')

module.exports = {
  // ...
  plugins: [
    new VueLoaderPlugin()
  ]
}
复制代码

调整 webpack.dev.conf.js

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

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

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

– webpack.DefinePlugin  
– webpack.NamedModulesPlugin  
– webpack.NoEmitOnErrorsPlugin
复制代码

调整 webpack.prod.conf.js

  同dev的配置,prod也要添加 mode:production,这里就不再赘述了。
  接着需要在配置表里添加optimization选项:

//webpack.prod.conf.js
...
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插件,并添加到插件里:

//webpack.prod.conf.js
...
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 (换成了splitChunksPlugin,在optimization里了)
复制代码

修改 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)
复制代码

  目前文件修改就完成了。

其他问题

  如果vue文件模板中有使用pug,也需要引入pug-loader、pug-plain-loader、pug:

npm install pug-loader pug-plain-loader pug --save-dev
复制代码

  在webpack的base配置文件中加入:

{ test: /\.pug$/, use: ['pug-plain-loader'] },
复制代码

  如果报:

Cannot assign to read only property 'exports' of object '#<Object>' 
复制代码

  这样的错误可以注释掉.babelrc文件中的 { "modules": false }:

["env", {
    //注释掉
    //"modules": false,
    "targets": {
    "browsers": ["> 5%", "last 2 versions", "not ie <= 8"]
    }
}]
复制代码

参考:
《Vue项目从webpack3.x升级webpack4完全指南》
webpack官网升级指引

注意:HTML-WEBPACK-PLUGIN 需要升级


作者:大洋洋2020
链接:https://juejin.cn/post/6844904146332565518
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

旧版vue-cli脚手架Webpack3项目如何升级Webpack4 的相关文章

随机推荐

  • 怎么将pdf文件转换成图片?三种方法

    在实际的工作过程中 PDF是非常常见的文档存储格式 也是很多网站默认的保存格式 对于PDF文件来说 其具备很多其他文件格式没有的优势和特点 例如 在PDF文件中 其排版整齐且固定 浏览直观且方便 为工作的开展提供了诸多便利 另外 为了能够提
  • [计算机网络]简单入门HTTPS : 确保Web网站安全

    前言 今天也是刚好看到HTTPS 感觉HTTPS有许多需要总结的地方 这里也是花点时间给大伙总结下 今天会从下面几个点入手给大伙介绍 HTTPS如何解决现有的HTTP安全问题 和HTTP的区别 HTTPS建立连接的过程 HTTPS的缺点 其
  • android蓝牙BLE(二) —— 通信

    android BLE系列 android蓝牙BLE 一 扫描 android蓝牙BLE 二 通信 android蓝牙BLE 三 广播 一 蓝牙基础协议 想了解蓝牙通信之前 需要先了解蓝牙两个最基本的协议 GAP 和 GATT 1 GAP
  • FreeCAD是什么、如何下载(windows+0.18.4版本)和安装以及中文设置

    目录 一 FreeCAD是什么 二 如何下载FreeCAD 三 FreeCAD安装过程 四 如何设置成中文 一 FreeCAD是什么 我本意是想用Qt连接CAD实现CAD的二次开发 实现在qt界面改变参数同时CAD图纸上的尺寸发生相应变化
  • Linux之Web服务器配置(Apache)

    摘要 Web Service技术 能使得运行在不同机器上的不同应用无须借助附加的 专门的第三方软件或硬件 就可相互交换数据或集成 依据Web Service规范实施的应用之间 无论它们所使用的语言 平台或内部协议是什么 都可以相互交换数据
  • 基于stm32f103c8t6HAL库六路电磁寻迹智能车

    基于stm32f103c8t6HAL库六路电磁寻迹智能车 学习单片机第一次参加相关比赛 下面分享一些关于调车的心得 1 控制舵机 舵机是控制小车转向的器件 而PWM波可以控制舵机 占空比越大 舵机旋转角度越大 接下来我们打开cubemx配置
  • FreeSwitch常用命令

    1 通话相关 先打客户 再转坐席 没有录音 EslMessage elme client sendSyncApiCommand originate sofia gateway huawei 015011275853 bridge user
  • JDBC数据源配置及管理

    JDBC驱动程序 JDBC驱动程序组件为java程序连接不同数据库系统提供服务 它通常由数据库系统方开发提供或由第三方提供 下载对应不同数据库的JDBC 数据库连接信息配置 URL 连接数据库系统资源描述符 DriverClass 数据库系
  • 交付文档注意事项

    最近涉及到项目交付 编写了很多技术文档 但因为没有经验导致多次修改 尤其是客户和我们技术人员的关注点其实是不一样的 就导致我没有抓住重点 导致反复修改 这里总结下我的一些经验 文档与技术协议合同对应 就我所经历的项目 前期的技术要求和最后的
  • 十大必掌握C++11新特性

    简介 C 11 之前被称作C 0x 即ISO IEC 14882 2011 是目前的C 编程语言的正式标准 它取代第二版标准ISO IEC 14882 2003 第一版ISO IEC 14882 1998发布于1998年 第二版于2003年
  • OCR测试——字体和背景颜色

    测试目的 测试图片中字体颜色和背景颜色对文字识别的影响 一 测试图片选择 黑色字体 白色背景 黑色字体 橙色背景 绿色字体 黑色背景 绿色字体 白色背景 白色字体 绿色背景 白色字体 橙色背景 橙色字体 白色背景 混合色字体 混合色背景 二
  • c# 遍历文件夹下的.exe文件,找到主应用程序文件

    遍历文件夹下的文件 exe文件 public static string ForeachFiles string FilePath SearchOption AllDirectories 指遍历全部的子文件夹 所有都遍历一次 string
  • 见到的一篇IOCP流程 自己用demo实现了一下, 简单照抄,改动了一点点

    要分析的实例分为两个线程 分别是主线程 MAIN 还有一个是创建的线程 ServerThread 1 主函数完成初始化工作 1 1 主线程 HANDLE hCompletion CreateIoCompletionPort INVALID
  • 针对树莓派vnc连接被拒绝,树莓派固定ip后上不了网的问题

    三月份玩了会树莓派 实现树莓派小车的自动登录 自动连接wifi 固定ip和vnc远程连接 具体见之前的树莓派小车记录的博客里 昨天发现小车虽然可以连接wifi 固定ip 甚至能vnc连接但是没有网络 ping不通除了自身ip以外的任何地址
  • SpringBoot单元测试Mock静态方法

    这两天写单元测试碰到了一个问题 就是这个subnetmap里面的数据格式我不知道是怎么样的 所以直接mock掉返回自己指定的值吧 mockito库并不能 mock静态方法 需要依赖powermock这个库才能对静态方法mock 可以直接用这
  • fastadmin 配置完成后部署到服务器报找不到模块问题

    现象 本地直接安装的fastadmin框架可以正常运行 迁移到服务器或者给别人用的时候就不行了 跟这个问题差不多nginx配置了rewrite fastadmin后台首页可以访问 但一刷新会去首页 怎么办 FastAdmin问答社区 现象一
  • 代码走查和代码审查_21世纪的代码审查

    代码走查和代码审查 有句老话说 不要谈论宗教或政治 为什么 因为这些主题充满了强烈的见解 但客观答案却很薄弱 一个人的确定性就是另一个人的怀疑 别人的常识只是对那些持不同看法的人的先验偏见 可悲的是 与这些有争议的主题进行对话会产生比光更多
  • 三元运算符 使用

    三元运算符 三元表达式判断闰年 var b 2012 var year b 4 0 b 100 0 闰年 平年 console log year 判断奇数偶数 var a prompt 输入你要判断的数 var a 3 var res a
  • 使用docker部署springboot项目并连接上mysql数据库

    使用docker部署springboot项目并连接上mysql数据库 预览 http 8 142 6 23 screen 项目开源地址 前端vue https gitee com gaohan888 echarts learning tre
  • 旧版vue-cli脚手架Webpack3项目如何升级Webpack4

    vue cli脚手架出到了4 3 1版本 目前主推通过create命令来新建项目 与过去的vue cli2的init命令不同的是 create命令脚手架建完的项目webpack为4 而init采用的模板中引用的webpack版本还是3 单独