29.webpack——library与libraryTarget的用法/如何打包一个库文件

发布时间:2024-12-24 05:46

如何打印文档:选中要打印的文件,点击‘文件’->‘打印’ #生活常识# #日常生活技巧# #基础电脑操作#

【重学webpack系列——webpack5.0】

1-15节主要讲webpack的使用,当然,建议结合《webpack学完这些就够了》一起学习。
从第16节开始,专攻webpack原理和高级API,只有深入原理和高级API,才能学到webpack设计的精髓,从而将技术点运用到实际项目中。
可以点击上方专栏订阅哦。

以下是本节正文:

commonjs与commonjs2的区别

// commonjs exports.add = function(a, b){ return a + b; } // commonjs2 module.exports = { add(a, b){ return a + b; } } 12345678910 library与libraryTarget library为导出库的名称libraryTarget为导出结果的形式 varcommonjscommonjs2thiswindowglobalumd

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-db6MdAKq-1629172313136)(C:\Users\yuhua7\AppData\Roaming\Typora\typora-user-images\image-20210813142617850.png)]

上面var的模式,在webpack中就会编译成:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Qli4bUO-1629172313139)(C:\Users\yuhua7\AppData\Roaming\Typora\typora-user-images\image-20210813142743917.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R8tj20q6-1629172313140)(C:\Users\yuhua7\AppData\Roaming\Typora\typora-user-images\image-20210813143523320.png)]

(上面最后一条注释请忽略)

如果libraryTarget是commonjs的话,webpack中就会编译成:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3CruM7g5-1629172313143)(C:\Users\yuhua7\AppData\Roaming\Typora\typora-user-images\image-20210813143235125.png)]

**特别注意:**这个图是修改过了,请自行查看编译后的内容,exports.calculator = exports;这是会有问题的,原因是:webpack返回的是module.exports,而不是exports,所以,如果光给exports赋值的话,module.exports还是为初始值,即{},那么引入的时候还是{} —— 这一点也是libraryTarget为commonjs时,会导致的问题!

举个例子:

// a.js exports = {age: 10} // Index.js const obj = require('./a.js') console.log(obj) // {} 123456

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HctxNb5V-1629172313147)(C:\Users\yuhua7\AppData\Roaming\Typora\typora-user-images\image-20210813143550988.png)]

(上面最后一条注释请忽略)

如果libraryTarget是commonjs2的话,webpack中就会编译成:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w0Lj2Mvx-1629172313148)(C:\Users\yuhua7\AppData\Roaming\Typora\typora-user-images\image-20210813143650064.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jLeYLSDY-1629172313149)(C:\Users\yuhua7\AppData\Roaming\Typora\typora-user-images\image-20210813143745514.png)]

(上面最后一条注释请忽略)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eyWmFOhN-1629172313150)(C:\Users\yuhua7\AppData\Roaming\Typora\typora-user-images\image-20210813143808594.png)]

注意:webpack返回的是module.exports,而不是exports,所以,如果光给exports赋值的话,module.exports还是为初始值,即{},那么引入的时候还是{} —— 这一点也是libraryTarget为commonjs时,会导致的问题!

举个例子:

// a.js exports = {age: 10} // Index.js const obj = require('./a.js') console.log(obj) // {} 123456

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UM4k6FWt-1629172313151)(C:\Users\yuhua7\AppData\Roaming\Typora\typora-user-images\image-20210813172005475.png)]

(上面最后一条注释请忽略)

导出的内容会挂载到this上,而这个this=module.exports=exports,所以this就是我们导出的内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1nJhvEAE-1629172313152)(C:\Users\yuhua7\AppData\Roaming\Typora\typora-user-images\image-20210813172453783.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6KVFgSN8-1629172313153)(C:\Users\yuhua7\AppData\Roaming\Typora\typora-user-images\image-20210813180701012.png)]

(上面最后一条注释请忽略)

window代表导出的内容挂载到window上

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WiXjS32C-1629172313154)(C:\Users\yuhua7\AppData\Roaming\Typora\typora-user-images\image-20210813180739162.png)]

(上面最后一条注释请忽略)

global代表导出的内容挂载到global上

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2LwTwXQD-1629172313155)(C:\Users\yuhua7\AppData\Roaming\Typora\typora-user-images\image-20210813181017005.png)]

(上面最后一条注释请忽略)

umd的话,会根据导出的数据类型,去走不同的逻辑。也就是同时支持commonjs、commonjs2、amd、全局变量等。比如moment这个库用的就是umd

(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') // 如果exports是对象并且commonjs2中的module是对象 module.exports = factory();// commonjs2才有modle else if(typeof define === 'function' && define.amd) define([], factory);// 如果define是函数并且define.amd存在,也就是说是amd else if(typeof exports === 'object') exports['MyLibrary'] = factory(); // 如果是对象 else root['MyLibrary'] = factory(); // 全局变量 })(typeof self !== 'undefined' ? self : this, function() { return _entry_return_; }); 123456789101112

另外:cmd、amd已经退出历史舞台了,淘汰了

网址:29.webpack——library与libraryTarget的用法/如何打包一个库文件 https://www.yuejiaxmz.com/news/view/551312

相关内容

Webpack之旅(二): webpack基本打包配置(Source
webpack自动化构建工具详细笔记,入门到实战,解决 webpack : 无法将“webpack”项识别为 cmdlet、函数、脚本文件或可运行程序的名称,和webpack : 无法加载文件等等
Webpack 快速入门
webpack 打包 node 程序出现 No native build was found for platform 问题解决
Vue项目的打包方式(生成dist文件)
Webpack优化——将你的构建效率提速翻倍
vue 项目中 动态加载图片src的解决方法
vue.config.js配置之configureWebpack(两种用法)
Flutter Android Studio打包安卓apk文件
Vue驱动,购物新体验:揭秘如何打造高效便捷的在线购物网站

随便看看