详解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 相关文章推荐
使用Modello编写JavaScript类
Dec 22 Javascript
JS复制到剪贴板示例代码
Oct 30 Javascript
JS根据变量保存方法名并执行方法示例
Apr 04 Javascript
使用jquery写个更改表格行顺序的小功能
Apr 29 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
Apr 17 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
May 16 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
Jun 03 Javascript
微信小程序 开发工具快捷键整理
Oct 31 Javascript
Ajax与服务器(JSON)通信实例代码
Nov 05 Javascript
Bootstrap table简单使用总结
Feb 15 Javascript
Vue计算属性的学习笔记
Mar 22 Javascript
详解vue.js之绑定class和style的示例代码
Aug 24 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/10/09 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
php返回字符串中所有单词的方法
2015/03/09 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
jquery 构造函数在表单提交过程中修改数据
2015/05/25 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
Javascript中prototype的使用详解
2016/06/18 Javascript
JSONP基础知识详解
2017/03/19 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
python实现人人网登录示例分享
2014/01/19 Python
wxpython 最小化到托盘与欢迎图片的实现方法
2014/06/09 Python
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
pygame实现非图片按钮效果
2019/10/29 Python
python能做哪方面的工作
2020/06/15 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
一些PHP的面试题
2015/05/06 面试题
2013年高中生自我评价
2013/10/23 职场文书
分厂厂长岗位职责
2013/12/29 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
班风学风建设方案
2014/05/06 职场文书
思想品德评语大全
2014/12/31 职场文书
素质拓展训练感想
2015/08/07 职场文书
2016应届毕业生自荐信范文
2016/01/28 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis