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实现动态增加删除表格行(兼容IE/FF)
Apr 02 Javascript
你需要知道的10个最佳javascript开发实践小结
Apr 15 Javascript
javascript学习笔记(十一) 正则表达式介绍
Jun 20 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
Jan 11 Javascript
javascript实现在指定元素中垂直水平居中
Sep 13 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
Nov 30 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
Dec 10 Javascript
利用jquery实现实时更新歌词的方法
Jan 06 Javascript
JavaScript实现换肤功能
Sep 15 Javascript
Vue快速实现通用表单验证的示例代码
Jan 09 Javascript
JavaScript如何操作css
Oct 24 Javascript
jQuery实现手风琴特效
Jan 11 jQuery
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导入Excel到MySQL的方法
2011/04/23 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
JS加ASP二级域名转向的代码
2007/05/17 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
2017/05/30 Javascript
AngularJS ionic手势事件的使用总结
2017/08/09 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
js仿360开机效果
2019/12/26 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
用 Django 开发一个 Python Web API的方法步骤
2020/12/03 Python
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
酒店个人求职信范文
2014/01/25 职场文书
物业管理专业自荐信
2014/07/01 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
汇报材料怎么写
2014/12/30 职场文书
优秀团员自我评价
2015/03/10 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
爱国电影观后感
2015/06/19 职场文书
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python