vue-cli webpack2项目打包优化分享

yizhihongxing

Vue-CLI webpack2项目打包优化分享

引言

作为Vue.js的开发者,我们在构建Vue.js项目的时候,尤其是当你的项目变得越来越庞大时,打包的时间会变得越来越慢。这不仅拖慢了我们开发的频率,也降低了我们的开发效率。在这里,我们将从webpack2的角度来分享优化Vue.js打包的一些技巧和经验。

优化打包时间

1. 使用 HappyPack

HappyPack是一个使Webpack在使用Loader时更快的插件,它通过多线程解析代码,加速编译速度。通过它,可以使打包时间大大缩短,特别适合大型项目的打包优化。

npm install --save-dev happypack
// webpack.config.js
const HappyPack = require('happypack')
const os = require('os')
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length })

module.exports = {
  //...
  module: {
    rules: [
      {
        test: /\.js$/,
        use: 'happypack/loader?id=js',
        exclude: /node_modules/
      },
      {
        test: /\.vue$/,
        use: 'happypack/loader?id=vue',
        exclude: /node_modules/
      }
    ]
  },
  plugins: [
    new HappyPack({
      id: 'js',
      threadPool: happyThreadPool,
      loaders: ['babel-loader?cacheDirectory']
    }),
    new HappyPack({
      id: 'vue',
      threadPool: happyThreadPool,
      loaders: ['vue-loader']
    })
  ]
}

2. 使用DllPlugin

DllPlugin是webpack内置的插件,用于把通用的依赖文件提出来单独打包,减少其他模块的编译时间。由于vendor是我们最常用的依赖,使用DllPlugin将会进一步减小我们用于构建的vendor文件的体积,使我们的构建时间更快。

安装DllPlugin:

npm install --save-dev webpack-dll-plugin

创建webpack.dll.conf.js配置文件:

const path = require('path')
const webpack = require('webpack')

module.exports = {
  entry: {
    vendor: [
      'vue',
      'vue-router',
      'vuex',
      'lodash'
    ]
  },
  output: {
    path: path.join(__dirname, '../static/js'),
    filename: '[name].dll.js',
    library: '[name]_library'
  },
  plugins: [
    new webpack.DllPlugin({
      path: path.join(__dirname, '[name]-manifest.json'),
      name: '[name]_library',
      context: __dirname
    })
  ]
}

在webpack.base.conf.js中引入DllReferencePlugin:

// webpack.base.conf.js
const webpack = require('webpack')
//...

module.exports = {
  //...
  plugins: [
    new webpack.DllReferencePlugin({
      context: __dirname,
      manifest: require('./vendor-manifest.json')
    })
  ]
}

在打包构建vendor文件的时候,可以使用如下命令:

npm run build:dll

优化打包质量

1. 代码规范

为了保证我们代码的可读性和维护性,我们应该使用ESLint来保持代码规范性。在这里推荐一种基于eslint-config-airbnb和eslint-plugin-vue的语法校验方案。

npm install --save-dev eslint eslint-config-airbnb eslint-plugin-vue eslint-loader
// .eslintrc.js
module.exports = {
  parser: 'babel-eslint',
  parserOptions: {
    sourceType: 'module'
  },
  extends: 'airbnb',
  env: {
    browser: true,
    es6: true
  },
  plugins: [
    'vue'
  ],
  rules: {
    'no-param-reassign': [2, { 'props': false }],
    'no-shadow': 0,
    'no-console': [2, { allow: ['warn', 'error'] }],
    'no-return-assign': 0,
    'no-underscore-dangle': 0,
    'consistent-return': 0,
    'import/first': 0,
    'import/no-unresolved': 0,
    'import/prefer-default-export': 0,
    'import/extensions': 0,
    'import/no-extraneous-dependencies': 0,
    'vue/jsx-uses-vars': 2,
    'vue/max-attributes-per-line': [2, {
      'singleline': 10,
      'multiline': {
        'max': 1,
        'allowFirstLine': false
      }
    }],
    'vue/prop-name-casing': [2, 'camelCase'],
    'vue/name-property-casing': [2, 'PascalCase'],
    'vue/html-self-closing': [2, {
      'html': {
        'void': 'never',
        'normal': 'never',
        'component': 'always'
      },
      'svg': 'always',
      'math': 'always'
    }]
  }
}

2. 按需加载

在Vue.js中,我们可以使用异步组件来实现按需加载,这样可以在路由控制的时候,只加载需要的组件。使用异步组件可以减少app浏览器的加载时间,提高页面的渲染速度。

使用require.ensure()方法按需加载:

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

const router = new Router({
  routes: [
    {
      path: '/',
      name: 'Home',
      component: resolve => require.ensure([], () => resolve(require('@/components/Home')), 'Home')
    },
    {
      path: '/about',
      name: 'About',
      component: resolve => require.ensure([], () => resolve(require('@/components/About')), 'About')
    }
  ]
})

在这个例子中,我们只在需要这个组件的时候才会动态加载。require.ensure()有三个参数,第一个参数为依赖数组,第二个参数是返回的模块,第三个参数是chunk name(加载器的名称)。

结论

在以上分享中,我们提供了两种常见的优化方式:HappyPack和DllPlugin用于优化打包时间,ESLint和按需加载用于优化打包质量。虽然这些优化策略并不是常规的优化方式,但在面对大型的Vue.js项目时,这些优化方法是帮助我们优化项目构建的更快和准确的方式之一。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue-cli webpack2项目打包优化分享 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 2019web前端面试总结(内附面经)

    首先,需要明确的是,“2019web前端面试总结(内附面经)”是一篇面试攻略,旨在帮助前端开发者准备面试。该攻略主要分为以下几个部分: 知识点总结:该部分主要总结了前端开发中的常用知识点,包括HTML、CSS、JavaScript、框架、HTTP等方面。在准备面试时,可以按照该部分内容进行复习提高。 面试技巧:该部分提供了一些面试技巧,例如如何准备简历、如何…

    node js 2023年6月8日
    00
  • 浅谈Node 异步IO和事件循环

    浅谈Node 异步IO和事件循环 Node.js是一个使用V8引擎来执行JavaScript代码的开源、跨平台、事件驱动的后端JavaScript运行环境。其中异步IO和事件循环是Node.js中的核心特性之一。 异步IO 在传统的Node.js中,JavaScript一直是单线程执行的。即使有多核CPU,Node.js也不会为JavaScript线程创建新…

    node js 2023年6月8日
    00
  • 浅析node连接数据库(express+mysql)

    下面我将详细讲解“浅析node连接数据库(express+mysql)”的完整攻略。 1. 什么是Node连接数据库 在使用Node.js搭建Web服务器时,经常需要与数据库进行交互,用来操作数据库的MySQL数据库是目前最为流行的开源数据库之一。Node.js通过库文件mysqljs来实现对MySQL数据库的连接和操作。 2. 使用Node连接MySQL数…

    node js 2023年6月8日
    00
  • es6和commonJs的区别解析

    ES6和CommonJS的区别解析 ES6和CommonJS是Javascript中两种不同的模块系统,都能够让开发人员更好地组织代码和管理依赖关系,但它们在许多方面都有所不同。 ES6模块系统 ES6模块系统定义了一种新的语法形式,可以让开发人员更好地编写面向对象的代码,并支持静态分析、编译时优化、自动代码拆分等高级特性。 创建ES6模块非常简单,只需要在…

    node js 2023年6月8日
    00
  • 浅谈Node.js轻量级Web框架Express4.x使用指南

    浅谈Node.js轻量级Web框架Express4.x使用指南 前言 Node.js 是一种非常流行的后端开发语言,可以快速构建高性能、可扩展的网络应用程序。而 Express 是 Node.js 中最流行的 Web 框架之一,其拥有轻量且易于使用的特点,同时具备完整的中间件系统。本文结合最新版 Express(4.x)来深入浅出地介绍使用指南。 安装 在使…

    node js 2023年6月8日
    00
  • ES6新特性:使用export和import实现模块化详解

    下面我将为你详细讲解如何使用 export 和 import 实现 JavaScript 模块化。首先,我们需要了解 ES6 新特性中的模块化规范。 ES6 新特性:模块化规范 ES6 引入了一种新的模块化规范,不再依赖于传统的全局命名空间,而是将功能划分为一个个独立的模块,通过 export 导出模块中的功能,通过 import 引入其他模块的功能。这样可…

    node js 2023年6月8日
    00
  • 纯JS 绘制数学函数

    下面就让我来为您详细讲解“纯JS 绘制数学函数”的完整攻略。 什么是纯JS 绘制数学函数? 纯JS 绘制数学函数是一种使用 JavaScript 语言编写程序,通过绘制图形的方式来展示数学函数的方法。使用此方法,可以实现用代码来绘制各种不同的数学函数图形,而无需借助于任何第三方库和工具。 绘制数学函数的基本原理 首先需要明确的是,绘制数学函数的本质就是将数学…

    node js 2023年6月8日
    00
  • 详解webpack编译多页面vue项目的配置问题

    下面我将详细讲解webpack编译多页面vue项目的配置问题的完整攻略。 背景介绍 在实际项目中,我们可能需要使用vue框架来开发多个独立的页面,这时我们需要使用webpack来对这些页面进行打包编译。在vue-cli的默认配置中,webpack只会编译单页面应用,在多页面应用中需要对webpack进行一些配置才能实现编译多个页面。 配置方式 设置entry…

    node js 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部