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日

相关文章

  • 浅谈Web Storage API的使用

    浅谈Web Storage API的使用 什么是Web Storage API? Web Storage API是HTML5标准中的一个新的特性,用于在客户端存储数据,能够放置较为复杂的数据类型。它分为sessionStorage和localStorage两类,前者在用户关闭浏览器之后数据被清空,而后者则是永久性存储。 Web Storage API的用法 …

    Vue 2023年5月28日
    00
  • vue编译器util工具使用方法示例

    对于vue编译器util工具的使用方法,我们可以分为两部分:安装和使用。 安装vue编译器util工具 vue编译器util工具是一个npm包,因此可以使用npm进行安装。在命令行中输入下面命令进行安装: npm install @vue/compiler-util –save 使用vue编译器util工具 在vue模板编译过程中使用vue编译器util工…

    Vue 2023年5月27日
    00
  • Vue如何调用接口请求头增加参数

    首先,要在 Vue 中调用接口并增加请求头参数,你需要在 Vue 中安装较为常用的发送 HTTP 请求的插件 axios。 如果你已经安装了 axios,那么在发送请求前,可以通过 axios.interceptors.request.use() 方法对请求进行拦截,再添加自定义的请求头部信息,例如: import axios from ‘axios’ //…

    Vue 2023年5月28日
    00
  • vue实现简易计时器组件

    下面我将为你详细讲解“Vue实现简易计时器组件”的完整攻略。 首先,在Vue中创建一个计时器组件需要经过以下几个步骤: 第一步:创建组件 在Vue中创建组件可以通过Vue.component()方法进行注册。代码如下: <template> <!– 计时器组件模板代码 –> </template> <script…

    Vue 2023年5月28日
    00
  • Vite+Electron快速构建VUE3桌面应用的实现

    下面我将为你详细讲解 “Vite + Electron 快速构建 Vue3 桌面应用的实现”。 简介 Vite 是一个基于 JavaScript 的构建工具,旨在提供一种快速开发的体验。它专注于提供简单的配置、快速的热更新功能以及媲美于 Webpack 的构建功能,对于快速实现前端开发者的需求非常有帮助。 Electron 是一个基于 Node.js 和 C…

    Vue 2023年5月27日
    00
  • vue3+TypeScript+vue-router的使用方法

    下面是关于”vue3+TypeScript+vue-router的使用方法”的完整攻略。 什么是Vue3,TypeScript和Vue-router? Vue3: Vue.js的最新版本,是一个用于构建用户界面的渐进式框架。它在性能、API和优化方面进行了一系列改进和优化。 TypeScript: TypeScript是一个由Microsoft开发的开源编程…

    Vue 2023年5月28日
    00
  • 微信小程序实战基于vue2实现瀑布流的代码实例

    为了更好地讲解微信小程序实战基于vue2实现瀑布流的代码实例,我们可以按照以下步骤展开: 1. 准备工作 首先需要在本地安装 Vue-cli 和 Weex-toolkit,打开命令行窗口,输入以下命令进行安装。 npm install -g vue-cli npm install -g weex-toolkit 2. 创建项目 接着,在命令行窗口中输入以下命…

    Vue 2023年5月27日
    00
  • Vue中的生命周期介绍

    下面是关于Vue中的生命周期介绍的完整攻略及示例: 什么是Vue的生命周期 Vue生命周期是指Vue组件从创建到销毁的整个过程中,它所要经历的各个阶段。Vue生命周期分为8个不同的阶段,每个阶段都有相应的钩子函数,可以在相应的时候进行自定义操作。 Vue生命周期的8个钩子函数 下面是Vue生命周期的8个钩子函数,从创建到销毁依次为: beforeCreate…

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