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 相关文章推荐
MooTools 1.2介绍
Sep 14 Javascript
location对象的属性和方法应用(解析URL)
Apr 12 Javascript
IE6下javasc#ipt:void(0) 无效的解决方法
Dec 23 Javascript
js判断undefined类型示例代码
Feb 10 Javascript
js获取数组的最后一个元素
Apr 14 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
Nov 25 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
Dec 03 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
Jun 30 Javascript
element 结合vue 在表单验证时有值却提示错误的解决办法
Jan 22 Javascript
Vue CLI3 开启gzip压缩文件的方式
Sep 30 Javascript
小程序实现列表删除功能
Oct 30 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
May 08 Javascript
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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
PHP模拟QQ登录的方法
2015/07/29 PHP
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
深入探密Javascript数组方法
2015/01/08 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
微信小程序之购物车功能
2020/09/23 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
灵活使用console让js调试更简单的方法步骤
2019/04/23 Javascript
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
python循环监控远程端口的方法
2015/03/14 Python
Python检测网络延迟的代码
2018/05/15 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
python批量赋值操作实例
2018/10/22 Python
解决Django连接db遇到的问题
2019/08/29 Python
Python递归函数特点及原理解析
2020/03/04 Python
用python发送微信消息
2020/12/21 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
2014年秋季开学寄语
2014/08/02 职场文书
光棍节联谊晚会活动策划书
2014/10/10 职场文书
教师岗位职责
2015/02/03 职场文书
2015毕业寄语大全
2015/02/26 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书