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 相关文章推荐
js动画效果制件让图片组成动画代码分享
Jan 14 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
Mar 31 Javascript
JavaScript学习笔记之数组去重
Mar 23 Javascript
Bootstrap每天必学之响应式导航、轮播图
Apr 25 Javascript
js动态生成form 并用ajax方式提交的实现方法
Sep 09 Javascript
纯js模仿windows系统日历
Feb 04 Javascript
vue组件父与子通信详解(一)
Nov 07 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
Jun 24 Javascript
webpack优化之代码分割与公共代码提取详解
Nov 22 Javascript
小程序使用wxs解决wxml保留2位小数问题
Dec 13 Javascript
JS实现时间校验的代码
May 25 Javascript
JavaScript实现拖动对话框效果的实现代码
Oct 12 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
php基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
实用函数10
2007/11/08 PHP
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
PHP实现动态柱状图改进版
2015/03/30 PHP
extjs 初始化checkboxgroup值的代码
2011/09/21 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
2016/09/27 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
Python中os和shutil模块实用方法集锦
2014/05/13 Python
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
python匿名函数用法实例分析
2019/08/03 Python
python求绝对值的三种方法小结
2019/12/04 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
2020/02/25 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
建筑工程实习自我鉴定
2013/09/19 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
2015年工会工作总结
2015/03/30 职场文书
技术入股协议书
2016/03/22 职场文书