详解基于Vue cli生成的Vue项目的webpack4升级

下面我将详细讲解“详解基于Vue CLI生成的Vue项目的webpack4升级”的完整攻略,包括具体步骤和示例说明。

1. 升级准备

1.1. 确认Vue CLI版本

首先需要确认当前使用的Vue CLI版本是否是3.x版本。如果不是3.x,需要先进行升级。可以通过以下命令检查版本:

vue --version

如果版本低于3.x,可以通过以下命令进行升级:

npm install -g @vue/cli

1.2. 确认webpack版本

确认当前生成的Vue项目中使用的是webpack3还是webpack4。如果不确定,可以查看package.json文件中的webpackwebpack-dev-server依赖项的版本号,如果版本是3.x,说明当前项目使用的是webpack3。

2. 升级过程

2.1. Vue CLI升级

如果确认当前使用的是Vue CLI 2.x版本,需要先卸载Vue CLI 2.x,然后安装Vue CLI 3.x。可以通过以下命令来卸载Vue CLI 2.x:

npm uninstall -g vue-cli

然后通过以下命令安装Vue CLI 3.x:

npm install -g @vue/cli

2.2. 创建新项目并检查配置

创建一个新的Vue项目:

vue create my-project

创建完成后,进入项目文件夹,并检查webpack.dev.conf.jswebpack.prod.conf.js文件,确认是否包含如下插件:

const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')

如果不存在这些插件,需要手动添加它们:

const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')

module.exports = {
  plugins: [
    new MiniCssExtractPlugin({
      filename: 'css/[name].[contenthash:8].css',
      chunkFilename: 'css/[name].[contenthash:8].css'
    }),
    new OptimizeCSSAssetsPlugin({
      cssProcessorOptions: {
        safe: true
      }
    })
  ],
  optimization: {
    minimizer: [
      new UglifyJsPlugin({
        cache: true,
        parallel: true,
        sourceMap: true
      })
    ]
  }
}

注意,optimize-css-assets-webpack-pluginuglifyjs-webpack-plugin已经不再是webpack的内置插件,需要手动安装并引入。

npm install --save-dev optimize-css-assets-webpack-plugin uglifyjs-webpack-plugin

2.3. 升级webpack

首先需要升级项目中使用的webpack依赖包:

npm install --save-dev webpack@4 webpack-cli

然后需要对webpack配置文件进行相应修改。

2.3.1. webpack.common.conf.js

首先修改webpack.common.conf.js文件,更新loader配置:

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

module.exports = {
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: {
          extractCSS: true,
          cssModules: {
            localIdentName: '[name]-[hash:base64:5]',
            camelCase: true
          }
        }
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/
      },
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader'
        ]
      },
      {
        test: /\.less$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          'less-loader'
        ]
      },
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: 'img/[name].[hash:7].[ext]'
        }
      },
      {
        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: 'media/[name].[hash:7].[ext]'
        }
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: 'fonts/[name].[hash:7].[ext]'
        }
      }
    ]
  }
}

注意:vue-style-loader已经不再需要,使用MiniCssExtractPlugin.loader替代即可。

2.3.2. webpack.dev.conf.js

然后修改webpack.dev.conf.js文件:

const merge = require('webpack-merge')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const baseWebpackConfig = require('./webpack.common.conf')

module.exports = merge(baseWebpackConfig, {
  mode: 'development',
  devtool: 'cheap-module-eval-source-map',
  devServer: {
    hot: true,
    open: true,
    contentBase: 'dist'
  },
  plugins: [
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: 'src/index.html',
      inject: true
    })
  ],
  optimization: {
    usedExports: true
  },
  performance: {
    hints: false
  }
})

主要更新如下:

  • 添加mode选项
  • 添加devtool选项
  • 添加devServer选项
  • 修改plugins选项,删除原来的extract-text-webpack-pluginoptimize-css-assets-webpack-plugin插件,替换成mini-css-extract-plugin
  • 添加optimization.usedExports选项

2.3.3. webpack.prod.conf.js

最后是webpack.prod.conf.js文件:

const merge = require('webpack-merge')
const CleanWebpackPlugin = require('clean-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const baseWebpackConfig = require('./webpack.common.conf')

module.exports = merge(baseWebpackConfig, {
  mode: 'production',
  devtool: false,
  output: {
    filename: 'js/[name].[chunkhash:8].js',
    chunkFilename: 'js/[name].[chunkhash:8].js'
  },
  plugins: [
    new VueLoaderPlugin(),
    new CleanWebpackPlugin(),
    new MiniCssExtractPlugin({
      filename: 'css/[name].[contenthash:8].css',
      chunkFilename: 'css/[name].[contenthash:8].css'
    }),
    new OptimizeCSSAssetsPlugin({
      cssProcessorOptions: {
        safe: true
      }
    })
  ],
  optimization: {
    minimizer: [
      new UglifyJsPlugin({
        cache: true,
        parallel: true,
        sourceMap: true
      })
    ]
  },
  performance: {
    hints: 'warning'
  }
})

主要更新如下:

  • 添加mode选项
  • 添加devtool选项
  • 修改output.filenameoutput.chunkFilename
  • 修改plugins选项,添加VueLoaderPlugin插件,删除原来的extract-text-webpack-pluginoptimize-css-assets-webpack-plugin插件,替换成mini-css-extract-plugin
  • 添加optimization.minimizer选项
  • 修改performance.hints选项

2.4. 测试

升级完成后,使用以下命令启动本地开发服务器:

npm run serve

如果没有报错并且能够正常访问页面,说明升级完成。

3. 示例说明

示例如下

以下是一个使用Vue CLI生成的Vue项目中的webpack升级示例:

  1. 确认当前使用Vue CLI的版本是否是3.x,如果不是,需要通过以下命令升级:
npm install -g @vue/cli
  1. 进入Vue项目文件夹,检查webpack.dev.conf.jswebpack.prod.conf.js文件。

  2. 如果希望使用webpack4,需要先升级webpack依赖包:

npm install --save-dev webpack@4 webpack-cli
  1. 修改webpack.common.conf.js文件中的loader配置。

  2. 修改webpack.dev.conf.js文件和webpack.prod.conf.js文件中的plugins和optimization选项。

  3. 运行npm run serve命令,测试升级后的项目是否正常运行。

以上就是升级基于Vue CLI生成的Vue项目的webpack4的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解基于Vue cli生成的Vue项目的webpack4升级 - Python技术站

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

相关文章

  • vue项目中js文件使用vue的this实例说明

    在Vue项目中,我们通常对Vue的this实例进行操作来完成逻辑,但在JS文件中使用Vue的this实例时,需要注意一些问题。下面是详细讲解“Vue项目中JS文件使用Vue的this实例”的攻略。 1. 环境搭建 首先,我们需要在Vue项目中安装相关的包: npm install vue –save-dev 然后,在脚本中导入Vue: import Vue…

    Vue 2023年5月27日
    00
  • vue使用Vue.extend方法仿写个loading加载中效果实例

    下面是详细讲解“vue使用Vue.extend方法仿写个loading加载中效果实例”的完整攻略: 1. Vue.extend方法简介 Vue.extend是Vue.js中一个全局API,它接受一个参数对象并返回一个新的组件构造函数,这个构造函数可以被像任何其它组件一样被实例化。 其主要作用是定义可复用的组件模板,这些模板可以在后面使用到。 2. 实现过程 …

    Vue 2023年5月29日
    00
  • Vue如何将页面导出成PDF文件

    下面我将详细讲解“Vue如何将页面导出成PDF文件”的完整攻略。 1. 安装依赖 首先,我们需要安装一个用于导出 PDF 的 JavaScript 库jsPDF。在 Vue 项目中,我们可以通过 npm 安装这个库: npm install jspdf –save 2. 导出 PDF 在我们安装好 jsPDF 库后,我们需要编写代码来将 Vue 页面导出成…

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

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

    Vue 2023年5月28日
    00
  • vue项目input标签checkbox,change和click绑定事件的区别说明

    我来为你详细讲解“vue项目input标签checkbox,change和click绑定事件的区别说明”的攻略。 标题:vue项目input标签checkbox,change和click绑定事件的区别说明 1. click和change事件的区别 在下面的示例中,我们将展示click和change事件在checkbox上的区别: <template&g…

    Vue 2023年5月27日
    00
  • vue 数组和对象不能直接赋值情况和解决方法(推荐)

    下面就来详细讲解一下“Vue 数组和对象不能直接赋值情况和解决方法”的完整攻略。 问题描述 在 Vue 中,我们经常需要对数据进行赋值操作。但是在进行数组或对象的赋值时,我们有时会遇到无法直接赋值的情况。例如: // 定义一个对象并初始化 let obj = { name: ‘John’, age: 25 } // 将一个新的对象赋值给 obj obj = …

    Vue 2023年5月28日
    00
  • Vue2中无法检测到数组变动的原因及解决

    当我们使用 Vue2 中的响应式系统时,可以通过 Vue.set 或者直接修改一个数组中的元素来触发视图的更新。但是,如果我们使用数组的方法(比如 push、pop、shift、unshift、splice、sort 或者 reverse)去修改数组,Vue2 中是无法直接检测到数组变动的,这是因为 Vue2 的响应式系统是通过 Object.defineP…

    Vue 2023年5月28日
    00
  • 简单了解Vue computed属性及watch区别

    下面就是“简单了解Vue computed属性及watch区别”的完整攻略。 一、computed属性 在Vue中,computed属性是一个带有缓存的计算属性,也就是说,computed属性只会在它依赖的数据发生变化时才会重新计算一次,否则会直接返回之前缓存的结果。 1.1 定义computed属性 computed属性的定义类似于Vue的数据属性,你可以…

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