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

yizhihongxing

针对“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实现打印页面的几种方法总结

    下面就为大家详细讲解利用Vue实现打印页面的几种方法总结的完整攻略。 1. 使用window.print()实现打印 使用Vue实现通过浏览器的 window.print() 方法打印页面的方法也非常简单,只需要在需要打印的页面(组件)主要区域定义一个‘打印’按钮,并在按钮上绑定方法即可。 示例代码如下(假设当前需要打印的页面是一个Vue组件,且包含一个名为…

    Vue 2023年5月27日
    00
  • 使用vue实现HTML页面生成图片的方法

    使用vue实现HTML页面生成图片的方法可以通过js的html2canvas库和canvas2image插件来实现。 一、安装所需依赖 可以通过npm安装html2canvas和canvas2image: npm install html2canvas canvas2image –save 二、页面内引入依赖的JS库 在所需页面入口文件里面引入,并使其成为…

    Vue 2023年5月27日
    00
  • Vue h函数的使用详解

    Vue h函数的使用详解 在Vue中,有时候我们需要手动创建一个虚拟节点来渲染成真实的DOM元素。这时候我们就可以使用Vue提供的h函数来创建一个虚拟节点,h函数会根据传入的参数自动创建对应的虚拟节点。 h函数的基本语法 Vue h函数的基本语法如下: h(tag, data?, children?) tag: String | Object data: O…

    Vue 2023年5月27日
    00
  • 使用Vue实现一个树组件的示例

    下面是使用Vue实现一个树组件的完整攻略。 确定需求 在实现一个树组件之前,首先需要明确需求,确定树组件需要实现的功能和样式等。例如,树组件需要拥有以下功能: 以树状结构展示数据; 支持节点的折叠和展开; 支持节点的选中和取消选中; 支持自定义节点的内容和样式。 根据以上需求,我们可以开始编写树组件的代码。 实现树组件 编写组件基础结构 使用Vue实现树组件…

    Vue 2023年5月28日
    00
  • vue中的inject学习教程

    关于“vue中的inject学习教程”的完整攻略,我们可以分为以下几个部分进行讲解: 一、inject的作用 inject 是在 Vue.js 上层组件向其下层子组件注入数据的方式。它支持我们在子组件中访问父组件的数据,不管层级有多深,而不需要一层层通过 prop 或事件来传递。因此,inject 及其衍生出的 provide 可以在一定程度上解决跨组件之间…

    Vue 2023年5月28日
    00
  • vuex中使用对象展开运算符的示例

    下面我将为你详细讲解“vuex中使用对象展开运算符的示例”的完整攻略。 什么是对象展开运算符 在 JavaScript 中,对象展开运算符(ES6)通过“…”符号来表示,可以将一个对象展开成多个对象。它可以用于组合对象、合并对象,也可以用于 vuex 中的状态更新。 示例代码: const obj1 = { a: 1, b: 2 }; const obj…

    Vue 2023年5月28日
    00
  • vue网站优化实战之秒开网页

    下面是具体的攻略: 1. 优化网络请求 压缩文件 压缩前端文件是一个非常常见的优化手段,通常使用Gzip或者Brotli。Gzip是一种广泛使用的压缩算法,可以减小文件大小并改善网页加载速度。而Brotli是Google开发的一种更高效的压缩算法,与Gzip相比可以达到更高的压缩率。可以在服务器端配置,启用Gzip和Brotli压缩。 使用CDN 使用CDN…

    Vue 2023年5月28日
    00
  • vue+quasar使用递归实现动态多级菜单

    使用递归实现动态多级菜单通常用在需要动态循环渲染多级菜单的场景中,常见的应用场景包括权限管理系统或者多层级的导航菜单。 下面将介绍使用Vue.js和Quasar框架实现递归渲染多级菜单的完整攻略。 创建数据结构 首先需要定义一个数据结构来表示多级菜单,可以使用一个包含名称、路由等属性的对象。 { name: ‘菜单名称’, route: ‘路由地址’, ch…

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