详细解释webpack的libraryTarget选项各个值的含义

1,607 阅读1分钟

以下介绍均使用配置项 library: '$common'

  • var 暴露一个用var 定义的$common变量。在node环境下不支持
var $common = function (e) {
  var t = {};
  ......
}([]).default;
  • window 针对浏览器环境使用,将$common变量赋给window对象,其它地方与var一模一样
window.$common = function (e) {
  var t = {};
  ......
}([]).default;
  • this 将window替换为this,其余和window一模一样
this.$common = function (e) {
  var t = {};
  ......
}([]).default;
  • jsonp 将 $common作为 jsonp回调函数
$common(function (e) {
  var t = {};
  ......
}([]).default);
  • global 在global对象上定义一个$common变量。类似于window,只是它会受target属性影响,当target为默认值web时,会在window上注册,如果你想在global上注册,必须修改target为node。
global.$common = function (e) {
  var t = {};
  ......
}([]).default;
// 当target属性为web(默认值是web)时,global会变为window;node时则为global
  • assign 暴露一个未定义的common变量。在node环境不支持。覆盖common变量的值
$common = function (e) {
  var t = {};
  ......
}([]).default;
  • amd 在define方法上定义$common变量,不能用script直接引用,必须通过第三方模块RequireJS来时用
define("$common", [], (function () {
  return function (e) {
    var t = {};
  }([]).default
}));
  • commonjs 在export对象上定义library设置的变量。在node中支持,浏览器中不支持。
exports.$common = function (e) {
  var t = {};
  ......
}([]).default;
  • commonjs2 直接用module.export导出export,会忽略$common变量。在node中支持,在浏览器中不支持。
module.exports = function (e) {
  var t = {};
  ......
}([]).default;
  • umd 该方案支持commonjs、commonjs2、amd,可以在浏览器、node中通用。
! function (e, t) {
  "object" == typeof exports && "object" == typeof module ? module.exports = t() :
  "function" == typeof define && define.amd ? define([], t) :
  "object" == typeof exports ? exports.$common = t() :
  e.$common = t()
}(window, (function () {
  return function (e) {
    var t = {};
  }([]).default
}));

参考资料
libraryTarget的几种选择我们来好好分析
深入理解webpack library,libraryTarget,externals的区别及作用
详解webpack的out.libraryTarget属性