首先要知道什么是UMD模块规范,一般js库为了兼容多个模块规范都是以UMD规范导出的。
不知道UMD的可以参考这篇文章:https://www.cnblogs.com/wenbinjiang/p/11429368.html
在CDN优化中由于我们采用直接script的方式在index.html中引入:
```
<script src="http://......"></script>
```
那么可以得知在访问网站的时候默认在没有加载require.js的情况下,我们是不包含AMD、Commonjs模块环境中。
用element-ui cdn来举例子 cdn地址为:https://cdn.bootcss.com/element-ui/2.12.0/index.js
直接浏览器打开改文件后发现非常乱,可以用在线js格式化:http://www.jq22.com/jsgsh
格式化后文件:
![](https://user-gold-cdn.xitu.io/2019/12/26/16f4146413376fd7?w=1211&h=341&f=png&s=24723)
代码非常多,但是我们只需要关心最上面function 里面的代码,里面使用了三元运算符在做逻辑判断,
```
function(e, t) {
"object" == typeof exports && "object" == typeof module ? // 这里判断是不是commonjs规范
module.exports = t(require("vue")) : // 符合
"function" == typeof define && define.amd ? // 判断是不是符合AMD规范
define("ELEMENT", ["vue"], t) : // 符合
"object" == typeof exports ? // 判断是不是符合CMD规范
exports.ELEMENT = t(require("vue")) : // 符合
e.ELEMENT = t(e.Vue) // 不在上述任何规范中,注册全局变量 ELEMENT
}
```
webpack.config.js
```
module.exports = {
externals: {
'element-ui':'ELEMENT'
}
}
```
到这里就大工搞成了,直接在项目中import ElementUI from 'element-ui' 即可
如果已经安装过不会加载npm安装过的,也不会打包进生产环境。
网友评论