webpack4系列教程,如何理解externals属性?
发布于 作者:苏南大叔 来源:程序如此灵动~

本文中,苏南大叔带大家理解一下externals
属性,本文中的实验例子还是jquery
。externals
属性是webpack
的配置文件里面的一个项目,不用额外安装什么乱七八糟的plugin
或者loader
。

本文测试环境:win10
、node@14.2.0
、npm@6.14.4
、webpack@4.43.0
、jquery@3.5.1
。
添加引用
模板html
里面添加jquery.js
的引用:
对应的入口文件js
里面,还要保留对应的import
或者require
。
这里的jquery
,并不是个固定不变的名字,在本文中,它可以被externals
属性所改变。这里先留个伏笔。在入口文件main.js
里面,苏南大叔还是这么使用的:
这三行代码中,jq
函数来自import
或者require
,继而来自externals
转化外部的jquery.js
。而$
和jQuery
则直接来着外部的jquery.js
生成的全局变量。

修改配置文件
因为本文还是加载jquery
,所以,记得清空相关配置项目,比如:expose-loader
或者webpack.ProvidePlugin
等。具体情况可以参见文末链接。
webpack.config.js
:
重点项目是:
- 左边的键名,是可以自定义的。主要是用于在模块化的
js
文件中,用来require
或者import
的。 - 右边的键值,是已经存在的某个
window
全局变量或者函数。比如在本文中,因为外联引入了jquery.js
。所以存在着全局的$
和jQuery
。甚至一条js
语句,也是合法的键值。例如:jQuery.noConflict()
。
所以在这里,下面的两个配置文件也是可以的。

修改名字
因为键名可自定义,所以:webpack.config.js
:
main.js
:

相关链接
- https://newsn.net/say/webpack-start.html
- https://newsn.net/say/webpack-jquery.html
- https://newsn.net/say/webpack-expose-loader.html
- https://newsn.net/say/webpack-provide-plugin.html
总结
本文中,就是把jquery.js
给抽取出来,成为了一个单独的js
。然后又通过webpack
的externals
,配置成了一个可识别的模块。这个时候,编译后的main.js
里面,虽然require
或者import
了,但是并不包含jquery.js
的内容,从某种角度上来说,避免了多次重复加载的问题。
更多webpack
相关文章,请点击:


