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 相关文章推荐
基于jquery的direction图片渐变动画效果
May 24 Javascript
js验证电话号码与手机支持+86的正则表达式
Jan 23 Javascript
Js可拖拽放大的层拖动特效实现方法
Feb 25 Javascript
jquery中attr和prop的区别分析
Mar 16 Javascript
js面向对象之公有、私有、静态属性和方法详解
Apr 17 Javascript
VUE JS 使用组件实现双向绑定的示例代码
Jan 10 Javascript
layui 给数据表格加序号的方法
Aug 20 Javascript
了解javascript中的Dom操作
May 27 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
Aug 04 Javascript
vue-router的钩子函数用法实例分析
Oct 26 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
Jan 12 Javascript
js闭包和垃圾回收机制示例详解
Mar 01 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
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
分享最受欢迎的5款PHP框架
2014/11/27 PHP
PHP获取二叉树镜像的方法
2018/01/17 PHP
PHP分享图片的生成方法
2018/04/25 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
jquery动态赋值id与动态取id方法示例
2017/08/21 jQuery
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
JS实现吸顶特效
2020/01/08 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
python pygame实现2048游戏
2018/11/20 Python
python实现桌面壁纸切换功能
2019/01/21 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
dpn网络的pytorch实现方式
2020/01/14 Python
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
外企测试工程师面试题
2015/02/01 面试题
副科级后备干部考察材料
2014/05/15 职场文书
党员目标管理责任书
2014/07/25 职场文书
上下班时间调整通知
2015/04/23 职场文书
Go语言并发编程 sync.Once
2021/10/16 Golang
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python