webpack4升级

2024-01-24 20:48
文章标签 升级 webpack4

本文主要是介绍webpack4升级,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、安装webpack-cli、webpack

"webpack": "^4.39.3"

"webpack-cli": "^3.3.7"

  • npm run dev报错
  • 因为 webpack 和 webpack-dev-server 版本不兼容,升级   "webpack-dev-server": "^3.1.4"
  • 再次启动,报错
  • 因为 html-webpack-plugin 版本不兼容 安装 "html-webpack-plugin": "^3.2.0",再次启动
  • 升级 "vue-loader": "^15.0.10"    再次启动
  • 最新版的 vue-loader 需要加一个新的配置 VueLoaderPlugin
  • // webpack.dev.conf.js
    // 引入
    const { VueLoaderPlugin } = require('vue-loader')

    // 在下面的插件中加入
    plugins: [
        new VueLoaderPlugin(),
    ]


    // webpack.prod.conf.js 文件同样
    // 引入
    const { VueLoaderPlugin } = require('vue-loader')

    // 在下面的插件中加入
    plugins: [
        new VueLoaderPlugin(),
    ]

  • 再次启动

  • dev环境升级完成

  • 运行npm run build报错

  • 因为  webpack.optimize.CommonsChunkPlugin 已经被弃用,需要使用新的配置 config.optimization.splitChunk

     

    // webpack.prod.conf.js
    // 在 plugins 同级下添加配置
    optimization: {
       splitChunks: {
         cacheGroups: {
           vendor: {
             test: /[\\/]node_modules[\\/]/,
             name: 'vendor',
             chunks: 'all'
           },
           manifest: {
             name: 'manifest',
             minChunks: Infinity
           },
         }
       },
     },
     plugins: [...]

    // 去掉 plugins 中的这部分代码
    new webpack.optimize.CommonsChunkPlugin({
       name: 'vendor',
       minChunks (module) {
         // any required modules inside node_modules are extracted to vendor
         return (
           module.resource &&
           /\.js$/.test(module.resource) &&
           module.resource.indexOf(
             path.join(__dirname, '../node_modules')
           ) === 0
         )
       }
     }),
     // extract webpack runtime and module manifest to its own file in order to
     // prevent vendor hash from being updated whenever app bundle is updated
     new webpack.optimize.CommonsChunkPlugin({
       name: 'manifest',
       minChunks: Infinity
     }),
     // This instance extracts shared chunks from code splitted chunks and bundles them
     // in a separate chunk, similar to the vendor chunk
     // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
     new webpack.optimize.CommonsChunkPlugin({
       name: 'app',
       async: 'vendor-async',
       children: true,
       minChunks: 3
     },

  • 再次运行

  • 因为官方已经不推荐使用 extract-text-webpack-plugin 提取 css 样式,可以使用 mini-css-extract-plugin 替代

  • // 首先安装  mini-css-extract-plugin@0.8.0
    // 并且去掉 package.json 中的包 "extract-text-webpack-plugin": "^4.0.0-beta.0",

    // webpack.base.conf.js

    // 去掉 extract-text-webpack-plugin
    // const ExtractTextPlugin = require('extract-text-webpack-plugin')

    // 引入
    const MiniCssExtractPlugin = require('mini-css-extract-plugin')

    // 下面的 generateLoaders 函数更改配置(*中间的为改动部分)
    function generateLoaders (loader, loaderOptions) {
       const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]

       if (loader) {
         loaders.push({
           loader: loader + '-loader',
           options: Object.assign({}, loaderOptions, {
             sourceMap: options.sourceMap
           })
         })
       }

       // Extract CSS when that option is specified
       // (which is the case during production build)
       if (options.extract) {

       // ********************
       // 改动在这里
         return [MiniCssExtractPlugin.loader].concat(loaders)
       // ********************

       } else {
         return ['vue-style-loader'].concat(loaders)
       }
     }

    // webpack.prod.conf.js

    // 去掉 extract-text-webpack-plugin
    // const ExtractTextPlugin = require('extract-text-webpack-plugin')

    // 引入
    const MiniCssExtractPlugin = require('mini-css-extract-plugin')

    // 去掉 plugins 里的配置
    new ExtractTextPlugin({
       filename: utils.assetsPath('css/[name].[contenthash].css'),
       allChunks: true,
     }),

    // 然后加入新的插件配置
    new MiniCssExtractPlugin({
       filename: utils.assetsPath('css/[name].[contenthash:12].css'),
       allChunks: true,
     }),

  • 再次启动

  • webpack4 需要指定打包的模式 (mode),指定一下就好,可以在 package.json 的命令中指定,也可以写入配置

     

    // webpack.dev.conf.js
    const webpackConfig = merge(baseWebpackConfig, {
        mode: 'development',
        module: {...}
    }


    // webpack.prod.conf.js 
    const webpackConfig = merge(baseWebpackConfig, {
        mode: 'production',
        module: {...}
    }

  • Cannot assign to read only property 'exports' of object '#' (mix require and export) #4039

  • .babellrc中添加插件"transform-es2015-modules-commonjs"

 

这篇关于webpack4升级的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/640953

相关文章

macOS升级后SVN升级

问题 svn: error: The subversion command line tools are no longer provided by Xcode. 解决 sudo chown -R $(whoami) /usr/local/Cellar brew install svn

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

JeecgBoot 升级springboot版本到2.6.0

1. 环境描述 Jeecgboot 3.0,他所依赖的springboot版本为2.3.5Release,将springboot版本升级为2.6.0。过程全纪录,从2开始描述。 2. 修改springboot版本号 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-pare

欧拉系统 kernel 升级、降级

系统版本  cat  /etc/os-release  NAME="openEuler"VERSION="22.03 (LTS-SP1)"ID="openEuler"VERSION_ID="22.03"PRETTY_NAME="openEuler 22.03 (LTS-SP1)"ANSI_COLOR="0;31" 系统初始 kernel 版本 5.10.0-136.12.0.

Zookeeper集群是如何升级到新版本的

方案1:复用老数据方案 这是经过实践的升级方案,该方案是复用旧版本的数据,zk集群拓扑,配置文件都不变,只是启动的程序为最新的版本。 参考文章: Zookeeper集群是如何升级到新版本的 方案2:重新建立数据方案 该方案的思路是:先停掉一台follower的机器上的服务,然后加入一个新版本的zk(zk的数据目录是空的),然后启动新zk,之后新zk会把旧集群中的数据同步过来。之后再操作另

mysql数据库8.0小版本原地升级

mysql数据库8.0小版本原地升级 准备工作升级工作停库使用新版本软件启动数据库更新环境变量重启数据库 升级日志 OS release: CentOS 7.9升级前DB version: MySQL 8.0.30数据库升级安装包:mysql-8.0.36-linux-glibc2.12-x86_64.tar.xzMySQL Shell安装包:mysql-shell-8.0.36

面试官:synchronized的锁升级过程是怎样的?

大家好,我是大明哥,一个专注「死磕 Java」系列创作的硬核程序员。 回答 在 JDK 1.6之前,synchronized 是一个重量级、效率比较低下的锁,但是在JDK 1.6后,JVM 为了提高锁的获取与释放效,,对 synchronized 进行了优化,引入了偏向锁和轻量级锁,至此,锁的状态有四种,级别由低到高依次为:无锁、偏向锁、轻量级锁、重量级锁。 锁升级就是无锁 —>

自动升级系统OAUS续

一.缘起       自从 自动升级系统的设计与实现(源码) 发布以后,收到了很多使用者的反馈,其中最多的要求就是希望OAUS服务端增加自动检测文件变更的功能,这样每次部署版本升级时,可以节省很多时间,而且可以避免手动修改带来的错误。   现在,我就简单介绍一下最新版本的OAUS中关于这个功能的实现。在上一个版本中,我们是这样操作的:           每次有版本更新时,我们需

自动升级系统OAUS

(最新OAUS版本请参见:自动升级系统OAUS的设计与实现(续))   对于PC桌面应用程序而言,自动升级功能往往是必不可少的。而自动升级可以作为一个独立的C/S系统来开发,这样,就可以在不同的桌面应用中进行复用。基于ESFramework的文件传送功能,我实现了一个可直接复用的自动升级系统OAUS,现在将其分享给大家。这篇文章将着重介绍OAUS的相关背景、使用方法,至于详细的实现细节,大

升级kali系统 进入后发现一直蓝屏

因为要出去晚饭 结果回来重启发现 一直蓝屏 感觉可能是升级过程中 什么软件的安装或者配置出了问题 就直接长按电源重启进入恢复模式 选择最新版的recovery Mode 然后输入  dpkg --configure -a 之后reboot重启  一切正常!