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 XML操作 封装类
Jul 01 Javascript
JS判断两个时间大小的示例代码
Jan 28 Javascript
JavaScript设计模式之工厂模式和构造器模式
Feb 11 Javascript
jQuery formValidator表单验证
Jan 07 Javascript
jQuery自定义滚动条完整实例
Jan 08 Javascript
微信JSSDK调用微信扫一扫功能的方法
Jul 25 Javascript
js 实现在2d平面上画8的方法
Oct 10 Javascript
vue数据初始化initState的实例详解
Apr 11 Javascript
实例详解带参数的 npm script
May 28 Javascript
vue日历/日程提醒/html5本地缓存功能
Sep 02 Javascript
vue请求数据的三种方式
Mar 04 Javascript
Javascript实现简易天数计算器
May 18 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
一个连接两个不同MYSQL数据库的PHP程序
2006/10/09 PHP
一篇有意思的技术文章php介绍篇
2010/10/26 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
JavaScript 原型学习总结
2010/10/29 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
2015/01/09 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
微信小程序开发经验总结(推荐)
2017/01/11 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
node.js中TCP Socket多进程间的消息推送示例详解
2018/07/10 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
2019/07/08 Javascript
python删除过期文件的方法
2015/05/29 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
2021/01/25 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
德国隐形眼镜店:LuckyLens
2018/07/29 全球购物
软件测试英文面试题
2012/10/14 面试题
个人生活学习自我评价范文
2013/11/26 职场文书
12岁生日感言
2014/01/21 职场文书
内刊编辑求职自荐书范文
2014/02/19 职场文书
公开服务承诺制度
2014/03/26 职场文书
疾病防治方案
2014/05/31 职场文书
国庆宣传标语
2014/06/30 职场文书
农村党支部书记司法四风问题对照检查材料
2014/09/26 职场文书
2014年采购工作总结
2014/11/20 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
java中用float时,数字后面加f,这样是为什么你知道吗
2021/09/04 Java/Android