位置: 编程技术 - 正文

深入浅出webpack之externals的使用(深入浅出Struts)

编辑:rootadmin

推荐整理分享深入浅出webpack之externals的使用(深入浅出Struts),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深入浅出意思,深入浅出webpack电子书,深入浅出夏寒陆行全文免费阅读笔趣阁番外,深入浅出webpack原理,深入浅出夏寒陆行全文免费阅读笔趣阁番外,深入浅出php,深入浅出TXl金银花讲的什么,深入浅出webpack电子书,内容如对您有帮助,希望把文章链接给更多的朋友!

我们通常在做项目时可能会把第三方库打包到bundle中,比如下面这张图

如果不想把第三方库打包到bundle中,这就有了externals。官方的使用externals比较简单

externals

官网文档解释的很清楚,就是webpack可以不处理应用的某些依赖库,使用externals配置后,依旧可以在代码中通过CMD、AMD或者window/global全局的方式访问。

只需三步——

1.在HTML中引入第三方库的cdn

2.在webpack中配置externals

3.在js中引用

好,现在我们可以随心所欲的使用jquery插件并保证不会打包到bundle中。external是怎么办到的呢?下面我们通过bundle的源码来分析下原理。

这里的/* 0 */和__webpack_require__分别指打包前js对应的模块函数,这里就不细说了。这里可以看到module.exports = jQuery,就是说我们externals中的key指的是require的东西,value指的就是它,就是说“当require的参数是jquery的时候,使用jQuery这个全局变量引用它”。这种最简洁的externals配置方式为默认的global模式,就是在window上挂一个全局变量,然后直接可以使用这个变量。具体的流程是这样,我们在源码中使用require('jquery')后,可以直接把jquery加到externals中,得到一个打包的trunk.js,但是在引入这个trunkjs之前,肯定要先引入jquery这个库文件,这个库文件会创建一个全局变量jQuery,而咱们的trunkjs中externals的jquery是global模式,所以实际上trunkjs引入jquery的时候,就会从全局变量中引用,即module.export = jQuery

当然,既然是通过这种externals方式,其实我们可以不用require引入,直接使用全局变量也是可以的。

大家如果注意到我刚说过的global模式的话,没错,你也许已经猜到了,我可以任意的使用不同的输出方式。如果打包文件我想运行到node环境下,我得使用commonjs规范,所以你要这么写。

打包后会是这样子。

然后我的项目中还用到了lodash,也想把它从bundle中移除,之前我的代码是这样子,引的是npm包

深入浅出webpack之externals的使用(深入浅出Struts)

现在我们的externals配置如下

我们必须要去掉这个const ,否则的话会报一个错误 lodash is not defined。为什么会这样呢?因为我们的lodash输出是global格式的,我在这里先卖一个关子,我们先统一一下输出格式,加一个libraryTarget字段

这个东西是干嘛用的呢?

他是我们输出文件的模块化规范,想想我们上面配置的commonjs jquery是运行在node下,总之记住一句话——我们最长使用的模块化方案是commonjs2和umd,前者是为node环境,后者是为浏览器环境。一共有这几种规范:

"var" - Export by setting a variable: var Library = xxx (default)

"this" - Export by setting a property of this: this["Library"] = xxx"commonjs" - Export by setting a property of exports: exports["Library"] = xxx"commonjs2" - Export by setting module.exports: module.exports = xxx"amd" - Export to AMD (optionally named - set the name via the library option)"umd" - Export to AMD, CommonJS2 or as property in root

然后报这个错误,也就是说我们的模块没有正确的输出,回到我们的externals,它更多的是指定当你引用一个包的时候,这个包(lodash)应该遵循哪种模块化方式(common,root,amd等等)引入,这意思就是说,打包的时候不需要关心他到底怎么输出。

ok,记得要将之前的覆盖掉,替换成下面的require,因为在externals中我们规范的commmonjs规范为lodash

也就是说,这就是我们最初的代码,即没有用过externals时候的代码,看,也就是说我们只需要配置externals和libraryTarget就可以,其他的业务逻辑代码不需要改变。包括我们的项目中还用了echarts,这个通通不用改变!!!!!

也就是说最终的代码是externals配合libraryTarget一起使用,如果去掉umd的话,会报这个错误

相应的源码是这样子

就是说我不知道通过那种方式输出,所以我应该告诉webpack,我通过umd方式输出,即将你的 lodash 暴露为所有的模块定义下都可运行的方式。它将在 CommonJS, AMD 环境下运行,或将模块导出到 global 下的变量.加上umd的源码如下

看到了吧,我通过require('lodash')引入模块,输出走的是commonjs规范,贴下最终的配置

标签: 深入浅出Struts

本文链接地址:https://www.jiuchutong.com/biancheng/373325.html 转载请保留说明!

上一篇:基于JavaScript中字符串的match与replace方法(详解)(javascript例子)

下一篇:bootstrap3中container与container_fluid外层容器的区别讲解

  • 进项税额转出是在当月还是回到所属期
  • 事业单位补提折旧怎么处理
  • 非财政补助结余分配借贷方向
  • 私人企业利润怎么分配?
  • 固定资产停止使用转入更新改造的会计处理
  • 员工出差火车票可以抵扣进项吗
  • 收到小规模企业农产品普票可以抵扣进项税吗?
  • 一般纳税人存货采购成本包括
  • 营改增对建筑业的影响有哪些
  • 企业发放员工工资
  • 房地产企业老项目增值税
  • 事业单位对外投资涉及的主要科目有
  • 应付利息与应付利息区别
  • 私营独资企业需要做账吗
  • 返税怎么操作流程
  • 增值税进行未认定怎么办
  • 企业自建房是什么意思
  • 怎么查公司连续缴纳社保记录
  • 增值税抵扣主要用于哪些税收?
  • 快递费可以抵扣进项税额吗
  • 委托贷款合同效力
  • 银行承兑电子汇票到期要怎么操作
  • cpu天梯图2022最新排行榜
  • 在win7系统中如何让电脑恢复出厂设置方法
  • 怎样结转销售成本会计分录
  • 商事账薄的特征
  • 公司付款给个人,怎么处理
  • ati2plab.exe是什么进程 ati2plab进程安全吗
  • 代销方式是什么意思
  • 所得税时间性差异与永久性有关吗
  • 建筑物附属设备包括哪些
  • 穹顶高度
  • 企业所得税核定征收方法有哪两种
  • 旅客运输服务进项税额的计算公式
  • 财务费用为什么流向债权人
  • 金税盘维护费抵税会计分录
  • 机器学习实战练手项目
  • 给最爱的他
  • 资本公积常用的计量方法
  • 对公帐户进出帐要交税吗
  • 个人注册投资有限公司
  • 进口消费税如何计税
  • 工程施工企业的增值税税率是多少
  • 财务报表如何看
  • 工资以现金形式发放英文
  • mssql备份数据库
  • 纳税申报表期末未缴税额什么意思
  • 本期盈余转入累计盈余
  • 怎样计提税金及附加
  • 个税专项附加扣除什么意思
  • 暂估回冲方式
  • 合同取得成本和销售费用
  • 过户车子需要带什么证件
  • 收到销售折让的负数发票怎么做会计分录
  • 增值税代扣代缴范围
  • 一般纳税人注销公司流程2023
  • 在保险中,保险利益的载体是
  • 电子银行承兑汇票到期怎么兑现
  • win10系统微软
  • xp开机延时启动程序
  • 了解的近义词
  • 在linux操作系统中,/etc/rc.d/init.d
  • 电脑久了就会高温
  • 怎样禁用ie
  • 盗版win10可以用win10商店吗
  • win7桌面移到其他盘
  • linux在网络方面的应用
  • 批处理文件.bat
  • unity3D游戏开发
  • 禁止指定qq号登录怎么弄
  • 各种常用的js函数有哪些
  • js定义数字
  • js跨域请求有哪些方式
  • unity第三人称视角跟随物体移动
  • bootstrap学习
  • android使用红杏代理更新sdk
  • 河南居民医保网上缴费查询
  • 微信扫码开票的记录怎么查询
  • 江西发票查询真伪查询
  • 杨静儿多少岁
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设