Vue使用CDN引用项目组件,减少项目体积的步骤


Posted in Javascript onOctober 30, 2020

Vue项目打包后有的文件动辄几百KB或几M,这对一个前端项目的加载无疑是致命的。当你的服务器部署在阿里云或亚马逊,每秒只有100kb的加载速度时,页面的载入速度绝对让你崩溃。那么有什么办法可以在依旧是100kb/s的加载速度下让我们的页面快起来呢?CDN算是其中之一的解决办法。

首先,我们要明白为什么我的Vue项目在打包后产生的文件会那么大。我们在最开始使用Vue的时候几乎所有组件、插件的引用都会放到项目主文件中进行即 main.js文件,我们的引用方式可能是这样的:

import Vue from 'vue'
import App from './App'
import Router from 'vue-router'
import ElementUI from 'element-ui'
import axios from 'axios'
import 'element-ui/lib/theme-chalk/index.css'
import cookies from 'vue-cookies'
import qs from 'qs'
import store from './store'

项目在打包的时候就会去自动查找依赖,并将依赖文件全部打入到项目中去,正是这些依赖的文件的存在导致了整个项目文件的体积庞大了起来。但是依赖文件又是必须的,总不可能把依赖文件删除了不是。CDN的出现就为上述情况提供了一种解决方案。

CDN全称Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。

Vue中使用CDN就相当于是将原本自己项目所需要下载的依赖文件交由用户的网络进行下载,Vue中仅仅保持对依赖文件的引用即可。主要需要改动的有两个地方一个是Vue的index.html,以及build目录下的webpack.base.conf.js,废话不多说,上代码:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width,initial-scale=1.0">
 <title>Demo index html</title>
 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-ui@2.12.0/lib/theme-chalk/index.css" rel="external nofollow" >
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.0"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-router@3.1.3"></script>
<script src="https://cdn.jsdelivr.net/npm/js-md5@0.7.3"></script>
<script src="https://cdn.jsdelivr.net/npm/element-ui@2.12.0/lib/index.js"></script>
</body>
</html>

所引用的资源文件Url分为几部分:

第一部分:https://cdn.jsdelivr.net/npm 指定当前资源下载站点,与之类似的还有UNPKG、cdnjs.com、BootCDN等。个人比较推荐使用jsdelivr,速度比较稳定

第二部分:所要引用的包名,如:vue, vue-route, element-ui

第三部分:具体引用依赖的版本号或具体文件,如:@2.6.0,@2.12.0/lib/index.js 此部分为可选部分   

css文件也可以使用cdn来进行引用

上述配置完成后,还需要修改build/webpack.base.conf.js文件:

'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const vueLoaderConfig = require('./vue-loader.conf')

function resolve(dir) {
 return path.join(__dirname, '..', dir)
}


module.exports = {
 externals:{
 'vue':'Vue',
 'element-ui':'ELEMENT',
 'vue-router':'VueRouter',
 "moment": "moment",
 "md5": "js-md5"
 },
 context: path.resolve(__dirname, '../'),
 entry: {
 app: './src/main.js'
 },
 output: {
 path: config.build.assetsRoot,
 filename: '[name].js',
 publicPath: process.env.NODE_ENV === 'production'
 ? config.build.assetsPublicPath
 : config.dev.assetsPublicPath
 },

如果没有标注部分的代码,请插入。在externals配置中,像Vue、ELEMENT、VueRouter这些都是固定写法,webpack会根据这些字符自动查找相关依赖并引入

在修改完上述文件后,还需要修改main.js中关于这些文件的应用:

import Vue from "vue";
import App from "./App";
import router from "VueRouter";
import cookies from "vue-cookies";
import VueAxios from "vue-axios";
import axios from "axios";//elementUI无需在引用,如需使用相关代码请使用ELEMENT代替如:const Message = ELEMENT.Message;

至此配置全部完成,需要注意的是使用CDN之后,用户在访问你的页面时都会去请求所配置的CDN文件,所以选择一个速度快且稳定的CDN站点十分重要的;还有就是并不是所有的依赖文件都可使用此等方式引用,有些组件是不会导出对象的,也就意味着不能使用CDN来完成使用。

以上就是Vue使用CDN引用项目组件,减少项目体积的步骤的详细内容,更多关于vue 减少项目体积的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
javascript定时变换图片实例代码
Mar 17 Javascript
详解jQuery插件开发中的extend方法
Nov 19 Javascript
js中自定义方法实现停留几秒sleep
Jul 11 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
Sep 24 Javascript
基于Jquery插件实现跨域异步上传文件功能
Apr 26 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
May 17 Javascript
AngularJS过滤器filter用法总结
Dec 13 Javascript
基于JavaScript实现本地图片预览
Feb 08 Javascript
解决ionic和angular上拉加载的问题
Aug 03 Javascript
深入理解vuex2.0 之 modules
Nov 20 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
Sep 23 Javascript
vue实现拖拽进度条
Mar 01 Vue.js
vue+swiper实现左右滑动的测试题功能
Oct 30 #Javascript
利用vue3+ts实现管理后台(增删改查)
Oct 30 #Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
Oct 30 #Javascript
解决vue侦听器watch,调用this时出现undefined的问题
Oct 30 #Javascript
vue2.0 watch里面的 deep和immediate用法说明
Oct 30 #Javascript
JavaScript实现轮播图效果
Oct 30 #Javascript
vue组件添加事件@click.native操作
Oct 30 #Javascript
You might like
德生PL330的评价与改造
2021/03/02 无线电
PHP脚本数据库功能详解(下)
2006/10/09 PHP
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
mysql中存储过程、函数的一些问题
2007/02/14 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
csdn 博客的css样式 v3
2009/02/24 Javascript
jQuery 表格工具集
2010/04/25 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
JavaScript中对JSON对象的基本操作示例
2016/05/21 Javascript
canvas知识总结
2017/01/25 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
Bootstrap实现下拉菜单多级联动
2017/11/23 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
JS实现简单省市二级联动
2019/11/27 Javascript
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
Python常见排序操作示例【字典、列表、指定元素等】
2018/08/15 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
锐步美国官方网站:Reebok美国
2018/01/10 全球购物
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
英国鞋网:Rubber Sole
2020/03/03 全球购物
拾金不昧表扬信范文
2014/01/11 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
好的促销活动方案
2014/08/21 职场文书
金融保险专业求职信
2014/09/03 职场文书
课改心得体会范文
2016/01/25 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
入门学习Go的基本语法
2021/07/07 Golang