详解Webpack如何引入CDN链接来优化编译后的体积


Posted in Javascript onJune 21, 2019

背景

在 Vue 项目中,引入到工程中的所有 js 文件,编译时都会被打包进 vendor.js,也就导致了 vendor.js 文件体积变得相当臃肿,一定程度上影响着页面的渲染。为了减少编译后的体积,提高页面渲染速度,我们可以通过引入 CDN 链接把库分离,多线程异步 js 库,从而达到加速渲染的目的。那么我们如何做呢?

步骤

1.引入CDN链接

在项目的 index.html 中,常规方式引入 CDN 链接,此处以 vue 和 element-ui 为例:

<body>
 <div id="app"></div>
 <!-- CDN方式引入vue -->
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
 <!-- CDN方式引入element-ui -->
 <script src="https://unpkg.com/element-ui@2.8.2/lib/index.js"></script>
</body>

2.添加externals属性

Vue-cli 2

在项目的 build/webpack.base.conf.js 中,在下面合适位置添加 externals 相关语句,在 entry 后面加入即可:

module.exports = {
 context: path.resolve(__dirname, '../'),
 entry: {
 function: './src/main.js'
 },
 externals:{
 'vue': 'Vue',
 'element-ui': 'ElementUI'
 }
 ...
}

Vue-cli 3

在项目根目录的 vue.config.js 中,将 configureWebpack 配置代码块添加进入即可:

module.exports = {
 configureWebpack:{
 externals: {
  'vue': 'Vue',
  'element-ui': 'ElementUI'
 }
 }
}

注意:在上述代码中,'vue': 'Vue' 对应形式为 key : value,其中 key 为项目中引用的名称,而 value 是资源本身定义的名称(不可改),正常情况下我们可以参照 src/main.js 进行查看:

import Vue from 'vue'
import ElementUI from 'element-ui'
//打开src/main.js查阅以上两行代码,其前面作为value,后面作为key。

3.注释import及Vue.use(xxx)

在项目的 src/main.js 中,注释掉以下语句:

// import Vue from 'vue'
// import ElementUI from 'element-ui'
// import 'element-ui/lib/theme-chalk/index.css'
import App from './App'

Vue.config.productionTip = false

// Vue.use(ElementUI)

注:使用 eslint 规则的项目请不要注释 import 及 Vue.use,除非你不使用那烦人的 eslint。

完成以上步骤后就可以开始执行 npm run build,你会发现编译后的 vendor.js 从几百K降到几十K,也就意味着优化体积已经成效。 另外,有好多网友先前为了减少体积就已经配置了 按需引入,如果引入 CDN 之后,记得把按需引入的配置去掉哦,因为引入 CDN 之后就不存在按需引入这种说法啦!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
利用JQuery为搜索栏增加tag提示
Jun 22 Javascript
jquery判断单个复选框是否被选中的代码
Sep 03 Javascript
JQuery上传插件Uploadify使用详解及错误处理
Apr 27 Javascript
safari,opera嵌入iframe页面cookie读取问题解决方法
Jun 23 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
Apr 12 Javascript
基于javascript实现判断移动终端浏览器版本信息
Dec 09 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
Aug 10 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
Feb 11 Javascript
Bootstrap table表格初始化表格数据的方法
Jul 25 Javascript
Vue基本使用之对象提供的属性功能
Apr 30 Javascript
openlayers4实现点动态扩散
Aug 17 Javascript
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
Vue多环境代理配置方法思路详解
Jun 21 #Javascript
微信小程序实现卡片层叠滑动效果
Jun 21 #Javascript
使用express来代理服务的方法
Jun 21 #Javascript
react+redux仿微信聊天界面
Jun 21 #Javascript
基于jQuery的时间戳与日期间的转化
Jun 21 #jQuery
jQuery事件委托代码实践详解
Jun 21 #jQuery
Vue.js中的extend绑定节点并显示的方法
Jun 20 #Javascript
You might like
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
用js怎么把&amp;字符换成&quot;&amp;amp:&quot;
2006/10/19 Javascript
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
python thread 并发且顺序运行示例
2009/04/09 Python
python标准算法实现数组全排列的方法
2015/03/17 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
大学毕业生通用自我评价
2014/01/05 职场文书
继承权公证书范本
2015/01/23 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
关于倡议书的范文
2015/04/29 职场文书
行为规范主题班会
2015/08/13 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
Java基础之线程锁相关知识总结
2021/06/30 Java/Android