Vue项目打包编译优化方案


Posted in Javascript onSeptember 16, 2020

1. 不生成.map文件

默认情况下,当我们执行 npm run build 命令打包完一个项目后,会得到一个dist目录,里面有一个js目录,存放了该项目编译后的所有js文件。

我们发现每个js文件都有一个相应的 .map 文件,它们仅是用来调试代码的,可以加快打包速度,但会增大打包体积,线上我们是不需要这个代码的。这里我们需要配置不生成map文件。

  • vue-cli2

config/index.js文件中,找到 productionSourceMap: true 这一行,将 true 改为 false。

  • vue-cli3

在 vue.config.js 中编写以下内容:

module.exports = {
 productionSourceMap: false
}

2. 按需引入第三方包

默认情况下,在打包完后的js文件中,vendor.xxx.js 这个文件是非常大的,它主要是我们用到的第三方包(vue、vue-router、vuex、axios、element-ui等等)。这里面的大部分是我们要用到的功能,而像 element-ui 这种,明显可以按块来分,我们只是用到了里面的个别组件,完全可以把它按需取出,没必要全部打包。

在 element-ui 的官网,介绍了按需引入的方法,借助 babel-plugin-component,我们可以只引入需要的组件,以达到减小项目体积的目的。

3. 路由懒加载

默认情况下,在打包完后的js文件中,app.xxx.js 这个文件是非常大的,它主要是我们编写的一些组件。那么无法避免的问题就是:当用户访问网页的时候,第一次的请求要加载整个 app.xxx.js,当我们的项目比较复杂的时候,这个文件也是相当大的。

接下来我们要做的,就是路由懒加载。也就是当访问一个页面的时候,只加载当前组件相关的js资源,访问其它页面的时候,再加载相应的组件代码。

通过vue提供的路由懒加载功能,我们能将原来的一个 app.xxx.js 文件,分块分成多个。

① 首先根据官网的说明,我们需要安装一个插件

npm install --save-dev @babel/plugin-syntax-dynamic-import

② 然后在 babel.config.js 中配置如下内容(网上说的是 .babelrc 文件,这是以前的配置格式):

module.exports = {
 presets: ["@vue/app"],
 plugins: ["@babel/plugin-syntax-dynamic-import"]
};

③ 接下来修改路由加载组件部分的代码。

这是我们原来的路由写法:

router.js

import Vue from "vue";
import Router from "vue-router";

import Home from "./views/Home.vue";
import About from "./views/About.vue";
import Form from "./views/Form.vue";
import Table from "./views/Table.vue";
import NavMenu from "./views/NavMenu.vue";

Vue.use(Router);

export default new Router({
 mode: "history",
 base: process.env.BASE_URL,
 routes: [
 {
  path: "/",
  name: "home",
  component: Home
 },
 {
  path: "/about",
  name: "about",
  component: About
 },
 {
  path: "/form",
  name: "myForm",
  component: Form
 },
 {
  path: "/table",
  name: "myTable",
  component: Table
 },
 {
  path: "/nav_menu",
  name: "myNavMenu",
  component: NavMenu
 }
 ]
});

这是我们修改完的路由写法:

router.js

import Vue from "vue";
import Router from "vue-router";

const Home = () => import("./views/Home.vue");
const About = () => import("./views/About.vue");
const Form = () => import("./views/Form.vue");
const Table = () => import("./views/Table.vue");
const NavMenu = () => import("./views/NavMenu.vue");

Vue.use(Router);

export default new Router({
 mode: "history",
 base: process.env.BASE_URL,
 routes: [
 {
  path: "/",
  name: "home",
  component: Home
 },
 {
  path: "/about",
  name: "about",
  component: About
 },
 {
  path: "/form",
  name: "myForm",
  component: Form
 },
 {
  path: "/table",
  name: "myTable",
  component: Table
 },
 {
  path: "/nav_menu",
  name: "myNavMenu",
  component: NavMenu
 }
 ]
});

更细节的内容参见官方文档

以上就是Vue项目打包编译优化方案的详细内容,更多关于vue项目打包优化的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
Javascript入门学习资料收集整理篇
Jul 06 Javascript
location.search在客户端获取Url参数的方法
Jun 08 Javascript
使用jquery实现select添加实现后台权限添加的效果
May 28 Javascript
jQuery回车实现登录简单实现
Aug 20 Javascript
JQuery做的一个简单的点灯游戏分享
Jul 16 Javascript
非常实用的12个jquery代码片段
Nov 02 Javascript
又一款js时钟!transform实现时钟效果
Aug 15 Javascript
vuejs 单文件组件.vue 文件的使用
Jul 28 Javascript
在vue项目中使用md5加密的方法
Sep 14 Javascript
Vue指令指令大全
Feb 09 Javascript
JavaScript 严格模式(use strict)用法实例分析
Mar 04 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
Aug 14 Javascript
Vue封装Axios请求和拦截器的步骤
Sep 16 #Javascript
如何在JS文件中获取Vue组件
Sep 16 #Javascript
javascript自定义加载loading效果
Sep 15 #Javascript
图解JS原型和原型链实现原理
Sep 15 #Javascript
vue实现简单全选和反选功能
Sep 15 #Javascript
vscode 调试 node.js的方法步骤
Sep 15 #Javascript
js实现特别简单的钟表效果
Sep 14 #Javascript
You might like
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
用PHP制作静态网站的模板框架(二)
2006/10/09 PHP
PHP Ajax实现页面无刷新发表评论
2007/01/02 PHP
PHP+FastCGI+Nginx配置PHP运行环境
2014/08/07 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
Yii2 rbac权限控制之rule教程详解
2016/06/23 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
qTip2 精致的基于jQuery提示信息插件
2012/02/17 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
Python运行的17个时新手常见错误小结
2012/08/07 Python
Python使用新浪微博API发送微博的例子
2014/04/10 Python
浅要分析Python程序与C程序的结合使用
2015/04/07 Python
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
分析python切片原理和方法
2017/12/19 Python
python 多线程重启方法
2019/02/18 Python
python创造虚拟环境方法总结
2019/03/04 Python
python自定义函数实现最大值的输出方法
2019/07/09 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
html5绘制时钟动画
2014/12/15 HTML / CSS
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
市场拓展计划书
2014/05/03 职场文书