详解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 相关文章推荐
分享14个很酷的jQuery导航菜单插件
Apr 25 Javascript
js点击更换背景颜色或图片的实例代码
Jun 25 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
Feb 12 Javascript
javascipt:filter过滤介绍及使用
Sep 10 Javascript
javascript 应用小技巧方法汇总
Jul 05 Javascript
Bootstrap每天必学之媒体对象
Nov 30 Javascript
javascript基于原型链的继承及call和apply函数用法分析
Dec 15 Javascript
浅谈react.js 之 批量添加与删除功能
Apr 17 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
Jul 27 Javascript
Vue数据双向绑定底层实现原理
Nov 22 Javascript
JS 创建对象的模式实例小结
Apr 28 Javascript
详细分析vue响应式原理
Jun 22 Javascript
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 中的输出缓冲
2006/12/21 PHP
PHP几个数学计算的内部函数学习整理
2011/08/06 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
PHP生成RSS文件类实例
2014/12/05 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
php cookie 详解使用实例
2016/11/03 PHP
javascript中关于执行环境的杂谈
2011/08/14 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
javascript自启动函数的问题探讨
2013/10/05 Javascript
js动态修改表格行colspan列跨度的方法
2015/03/30 Javascript
JQuery中Bind()事件用法分析
2015/05/05 Javascript
jQuery中cookie插件用法实例分析
2015/12/04 Javascript
深入理解Node.js的HTTP模块
2016/10/12 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
微信小程序 循环及嵌套循环的使用总结
2017/09/26 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
React 路由懒加载的几种实现方案
2018/10/23 Javascript
axios+Vue实现上传文件显示进度功能
2019/04/14 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
Python日志模块logging基本用法分析
2018/08/23 Python
python 生成器需注意的小问题
2020/09/29 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
数据管理员的自我评价分享
2013/11/15 职场文书
幼儿园门卫制度
2014/01/29 职场文书
安全生产承诺书
2014/03/26 职场文书
节水宣传标语口号
2015/12/26 职场文书
python数字图像处理:图像简单滤波
2022/06/28 Python
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript