vue-cli2 构建速度优化的实现方法

针对“vue-cli2 构建速度优化的实现方法”的完整攻略,我可以为你提供以下几个步骤:

1. 使用线程池

在项目目录下的build/webpack.base.conf.js文件中,我们可以使用thread-loader来开启线程池,将耗时的操作放置在子进程中进行提高构建速度。

// ...
const threadLoader = require('thread-loader');

threadLoader.warmup({
  // the number of CPUs/cores you want to allocate for your child processes
  // 默认情况下将使用 CPU 的数量
  workers: require('os').cpus().length - 1,
  // how long the idle timeout is for workers
  // 闲置多久后关闭子进程
  // 默认是 500ms
  workerTimout: 5000,
});

module.exports = {
  // ...
  module: {
      rules: [
          {
            test: /\.js$/,
            loader: [
              'thread-loader',
              'babel-loader',
            ],
            // 可选配置项
            options: {
              // 活着的 worker 的数量
              // 默认是 (os.cpus().length - 1)
              workers: 2,
            },
          },
      ],
  },
};

使用线程池可以大幅提升构建速度,特别是在处理较大的代码库时。

2. 使用 DLLPlugin

Vue Cli 2 默认生成的项目中已经使用了 commons chunk 来提取公共模块,然而在构建应用的过程中,每次重新构建都需要重新构建一次 vendorjs,因此我们可以使用 DLLPlugin 抽取第三方模块,将它们打成静态资源文件避免每次构建都重复打包。

2.1 安装依赖

在项目目录下运行以下命令安装所需的依赖:

yarn add -D webpack@^3.0.0 webpack-dev-server@^3.0.0 webpack-merge@^4.0.0 dll-webpack-plugin@^1.0.0 uglifyjs-webpack-plugin@^2.0.0

2.2 添加配置文件

在项目根目录下添加如下配置文件:

// webpack.dll.conf.js
const path = require('path');
const webpack = require('webpack');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

const config = {
  entry: {
    vendor: [
      'vue',
      'vue-router',
      'vuex',
    ],
  },
  output: {
    path: path.join(__dirname, './src/dll'),
    library: '[name]_[hash]',
  },
  plugins: [
    new webpack.DllPlugin({
      path: path.join(__dirname, './src/dll', '[name]-manifest.json'),
      name: '[name]_[hash]',
    }),
    // 打包后再进行一次压缩
    new UglifyJsPlugin({
      sourceMap: true,
      compress: {
        warnings: false,
        // 忽略 console.log
        drop_console: true,
      },
    }),
  ],
};
module.exports = config;

2.3 添加 Npm Script

package.json文件中添加以下脚本:

{
  // ...
  "scripts": {
    // ...
    "build:dll": "webpack --config build/webpack.dll.conf.js",
  }
}

2.4 构建 DLL

执行以下命令,构建 DLL:

yarn build:dll

执行完成后,生成的 dll 目录下将包含 vendor.dll.jsvendor-manifest.json 两个文件。

2.5 修改 build/webpack.prod.conf.js

build/webpack.prod.conf.js文件中添加以下配置:

const webpack = require('webpack');
const { merge } = require('webpack-merge');
const webpackBaseConfig = require('./webpack.base.conf');
// 指向 vendor.manifest.json 文件
const manifest = require('../src/dll/vendor-manifest.json');

module.exports = merge(webpackBaseConfig, {
  mode: 'production',
  devtool: false,
  output: {
      publicPath: './',
      filename: utils.assetsPath('js/[name].[chunkhash].js'),
      chunkFilename: utils.assetsPath('js/[id].[chunkhash].js'),
  },
  optimization: {
      splitChunks: {
          chunks: "all",
          cacheGroups: {
              vendor: {
                  // 指向 vendor.manifest.json 文件
                  test: /node_modules\/(vue|vue-router|vuex)\//,
                  name: 'vendor',
                  enforce: true,
              },
          },
      },
      runtimeChunk: true,
  },
  plugins: [
    new webpack.DllReferencePlugin({
      context: process.cwd(),
      manifest,
    }),
  ],
});

这样在生产打包时,就不用每次都打包第三方库了。

上述两个方法在 Vue 2.x 项目中都有很大的帮助,可以较大程度地提升构建速度,特别在项目庞大且开发者较多的情况下,更是如此。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue-cli2 构建速度优化的实现方法 - Python技术站

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

相关文章

  • vue cli3.x打包后如何修改生成的静态资源的目录和路径

    要修改Vue Cli 3.x生成的静态资源的目录和路径,步骤如下: 打开 vue.config.js 文件,如果没有该文件则需要手动创建,该文件需要放在项目根目录下。 在该文件中添加如下代码: module.exports = { publicPath: ‘./your-path/’ } 其中,publicPath 表示静态资源的目录和路径,./your-p…

    Vue 2023年5月27日
    00
  • 在vue项目中优雅的使用SVG的方法实例详解

    让我来为你详细讲解一下在Vue项目中优雅地使用SVG的方法。 在Vue项目中优雅地使用SVG的方法 什么是SVG? SVG(Scalable Vector Graphics)是一种基于XML语法的矢量图形格式,用于描述二维图形和绘图程序。相对于传统的像素图形格式(如JPG、PNG、BMP等),SVG图像拥有无限的放大缩小比例,因此可以良好地适应各种分辨率的设…

    Vue 2023年5月28日
    00
  • 详解如何从零开始搭建Express+Vue开发环境

    从零开始搭建一个Express+Vue的开发环境,步骤如下: 1. 安装Node.js和npm 首先需要安装Node.js和npm,这是Express和Vue的开发环境所依赖的环境。可以在Node.js官网上下载最新版本的Node.js,安装好后可以在命令行中输入node -v和npm -v命令来确认是否安装成功。 2. 创建Express应用 安装好Nod…

    Vue 2023年5月28日
    00
  • Vue前端书写规范大全(非常详细!)

    首先我们来谈谈Vue前端书写规范大全的重要性,这是因为在Vue开发中,写好规范的代码能够提高代码的可读性和可维护性,同时也能够避免很多不必要的错误和 bug,因此Vue前端书写规范大全是非常重要的。 Vue前端书写规范大全主要包括以下几个方面: 1. 文件命名规范 1.1 Vue 单文件组件命名规范 Vue 单文件组件(.vue 文件)应按照以下格式进行命名…

    Vue 2023年5月27日
    00
  • vue组件生命周期钩子使用示例详解

    Vue组件生命周期钩子使用示例详解 在Vue组件的生命周期中,每个实例会从创建、挂载、更新、销毁四个不同的阶段。在这些不同的阶段中,我们可以通过使用生命周期钩子函数来控制组件的行为。本文将详细讲解Vue组件生命周期钩子函数的使用方法,并通过示例代码介绍其具体应用。 Vue组件生命周期钩子函数 Vue组件生命周期可以分为8个阶段,每个阶段都有对应的生命周期钩子…

    Vue 2023年5月27日
    00
  • vue 使用post/get 下载导出文件操作

    要在Vue中使用POST/GET下载导出文件,我们可以使用Axios库来发送异步请求并处理响应。以下是完整的攻略。 创建后台API 首先,我们需要在后台创建可以导出文件的API。通常情况下,我们会在服务器上为此目的创建一个专用的控制器。 对于此示例,我们将创建一个名为export的GET请求,并将文件的URL作为响应发送回到客户端。请注意,此示例代码仅用于参…

    Vue 2023年5月27日
    00
  • vue+elementUl导入文件方式(判断文件格式)

    下面是详细讲解“vue+elementUl导入文件方式(判断文件格式)”的完整攻略。 1. 需要用到的技术栈 本文使用的技术栈为:Vue + ElementUI。 2. 文件导入方式 Vue + ElementUI 实现文件的导入方式主要分为以下几个步骤: 2.1 导入 ElementUI Upload 组件 ElementUI 提供了 Upload 组件,…

    Vue 2023年5月28日
    00
  • 为什么vue中不建议使用空字符串作为className

    在Vue中使用类名时,应尽量避免空字符串作为类名,以下是原因及解决方案: 1. 空字符串无法清除类名 在Vue中使用 v-bind:class 绑定类名时,空字符串会被视为有效的类名。当我们通过更改 data 中的属性值来更改类名时,空字符串也会作为一个类名被添加。但是,一旦添加上了空字符串,就无法通过更改该属性值来清除这个空字符串类名。 示例代码: &lt…

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