其他分享
首页 > 其他分享> > 【转载】详解webpack的out.libraryTarget属性

【转载】详解webpack的out.libraryTarget属性

作者:互联网

转载:https://blog.csdn.net/frank_yll/article/details/78992778

Webpack 作为目前前端最热门的打包工具,相信很多人都在项目中使用过,其繁杂的配置项也确实“配”得上他老大的身份 o(╯□╰)o。output.libraryoutput.libraryTarget属性可能大家都会比较陌生,因为一般如果只在项目中使用 webpack 不需要关注这两个属性,但是如果是开发类库,那么这两个属性就是必须了解的。

简介

回想一下,当我们引入别人开发的类库时有几种方式?下面假设我们引入一个demo方法:

大家思考一下,为什么这个类库能支持不同方式的引入?如何实现的?这就是 webpack 配置output.libraryoutput.libraryTarget提供的功能。

output.library

支持输入string或者object(从 webpack 3.1.0 版本开始支持; 限于 libraryTarget: “umd” 时使用)类型的值。

output.library的值被如何使用会根据output.libraryTarget的取值不同而不同。而默认output.libraryTarget的取值是var,如果如下配置:

1 output: {
2   library: "myDemo"
3 }

如果在 HTML 页面中使用script标签引入打包结果文件,那么变量myDemo对应的值将会是入口文件(entry file)的返回值。

output.libraryTarget

支持输入string类型的值。默认值:var

此配置的作用是控制 webpack 打包的内容是如何暴露的。请注意这个选项需要和output.library所绑定的值一起产生作用。在以下的 demo 中,假设output.library值是myDemo_entry_return_表示入口点返回的值。在bundle中,它是webpack从入口点生成的函数的输出。

暴露一个变量

以下选项会把打包返回的值(无论暴露的是什么)绑定到一个由output.library指定的变量上,无论包是被如何引用。

通过对象属性暴露

以下选项将库的返回值(无论返回值是什么)分配给特定对象的指定属性,属性由output.library指定,对象由output.libraryTarget指定。

output.library没有指定为非空字符串,那么默认行为是将库返回值的所有属性(properties)都分配到对象中,代码如下:

 (function(e, a) { for(var i in a) e[i] = a[i]; }(${output.libraryTarget}, _entry_return_) 
 

注意,发生这个行为的时候 webpack 并不会检查对象中是否已经存在这些属性值,也就是会发生覆盖行为。

模块定义系统

以下选项将产生一个包含更完整兼容代码的包,以确保与各种模块系统的兼容性。 此时output.library选项在不同的output.libraryTarget选项下具有不同的含义。

其他类型

总结

以上所有栗子可以下载 webpack-libraryTarget-demo 项目,运行 npm i 安装依赖,接着 npm run build-all 命令执行打包,最后在 dist 目录下查看不同打包方式生成的代码。

output.libraryTarget一共支持的值:

  1. var - 默认值
  2. assign
  3. this
  4. window
  5. global
  6. commonjs
  7. commonjs2
  8. amd
  9. umd
  10. jsonp

标签:entry,return,libraryTarget,library,webpack,output,myDemo,out
来源: https://www.cnblogs.com/h2zZhou/p/12986221.html