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

下面就是Vue项目从webpack3.x升级webpack4.x的完整攻略。

升级前的准备

在升级之前,我们需要先做好以下准备工作:

  • 确定当前项目使用的webpack版本;
  • 了解当前使用的webpack配置,包括各个配置项以及对应的含义;
  • 相关依赖库的版本是否与webpack4.x兼容,如vue-loader、babel-loader等。

在这个前置知识的基础上,我们就可以开始升级了。

webpack升级方法

大致的升级流程如下:

  1. 更新webpack及相关loader的版本;
  2. 修改webpack配置,适配webpack4.x的变化;
  3. 测试及调整。

下面我将分步骤进行详细讲解。

步骤一:更新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配置

  1. webpack配置的模式

  2. 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()],
  },
  // ...
}
  1. webpack配置的module规则项

  2. 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' 
      },
      // ...
    ]
  },
  // ...
}
  1. webpack配置的plugins项

  2. 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技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue2 与 Vue3 的数据绑定原理及实现

    Vue2 与 Vue3 的数据绑定原理及实现 Vue2 的数据绑定原理及实现 Vue2 的数据绑定原理: Vue2 的数据绑定使用的是 Object.defineProperty,基于数据劫持来监听数据变化。(即通过 getter 和 setter 对数据的读写进行劫持实现数据监听) Vue2 实现数据绑定的步骤: 初始化:生成观察者Watcher对象,收集…

    Vue 2023年5月27日
    00
  • Vue实现模糊查询filter()实例详解

    Vue实现模糊查询filter()实例详解 1. 简介 在Vue中,我们可以通过实现filter()函数来实现文本框的模糊查询功能,用户可以输入关键字,然后Vue会根据关键字对数据源进行过滤,只展示符合要求的数据,这无疑会提高应用程序的用户体验,本文就是要介绍如何使用Vue实现模糊查询filter()函数的详细攻略。 2. 实现步骤 2.1 准备数据 首先,…

    Vue 2023年5月27日
    00
  • vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作

    使用vuex作为全局状态管理器,可以让我们更好地管理组件之间的数据共享。然而,在使用vuex时,我们也会遇到一些坑,其中最常见的就是修改vuex中的数据后,组件中的页面没有及时地渲染。以下为使用vuex时如何避免这些问题的攻略: 1. 避免直接处理vuex状态 直接修改vuex中的状态,可能会导致状态与组件的同步问题。我们应该使用mutation来修改状态。…

    Vue 2023年5月29日
    00
  • Vue中添加滚动事件设置的方法详解

    下面详细讲解在Vue中添加滚动事件设置的方法。 1. 给元素绑定滚动事件 我们可以使用v-on指令来给元素绑定滚动事件。比如下面给一个div元素绑定滚动事件: <div v-on:scroll="handleScroll"></div> 上面的代码中,v-on:scroll表示给div元素绑定滚动事件,handle…

    Vue 2023年5月28日
    00
  • VUE中使用Vue-resource完成交互

    使用Vue-resource完成交互可以实现前端页面和后端服务器之间的数据交换和通信。下面是使用Vue-resource实现交互的完整攻略: 1. 安装Vue-resource 在使用Vue-resource前,首先要将其安装到Vue项目中,可以通过在命令行中执行以下命令进行安装: npm install vue-resource –save 2. 引入V…

    Vue 2023年5月28日
    00
  • Vue源码学习defineProperty响应式数据原理实现

    针对该主题,我将从以下几个方面进行讲解: defineProperty的基本概念和用法 Vue中响应式数据的实现原理 Vue源码中defineProperty的具体实现步骤和代码分析 示例说明响应式数据的使用和实现 defineProperty的基本概念和用法 在 ES5 中引入了 Object.defineProperty() 方法,该方法可以对对象的属性…

    Vue 2023年5月28日
    00
  • JS实现的幻灯片切换显示效果

    当下,网站的幻灯片切换效果越来越流行,JS作为前端语言自然是实现幻灯片切换的最佳选择。下面我将详细讲解JS实现的幻灯片切换显示效果的攻略,包含如何引入JS库,如何使用JS实现切换效果等重要内容。 引入JS库 要实现幻灯片切换效果,首先要引入JS库。目前比较流行的JS库有jQuery和Zepto.js,我们可以根据项目的实际需求选择不同的库进行引入。比如我们使…

    Vue 2023年5月28日
    00
  • 浅谈Vue为什么不能检测数组变动

    让我们来详细讲解一下为什么 Vue 不能检测数组变动。 为什么 Vue 不能检测数组变动 首先,需要明确的是,Vue 实例在渲染模板时使用的是虚拟 DOM。当响应式属性发生变化时,Vue 会比较新旧虚拟 DOM,然后仅对变化的部分进行重新渲染,这样可以提高性能。 但是,Vue 不能仅凭虚拟 DOM 来判断数组是否发生变化。这是因为 JavaScript 中的…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部