Javascript UMD:分配给module.exports是否冗余?

Javascript UMD:分配给module.exports是否冗余?,javascript,umd,Javascript,Umd,我看到JS库使用这两种不同的实现。唯一的区别是CommonJS行 它们的功能相同吗?是否不需要将值分配给module.exports /* 1: Assignment to module.exports */ (function(factory) { if (typeof define === 'function' && define.amd) { // AMD define(['jquery'], factory); } else if (typeof

我看到JS库使用这两种不同的实现。唯一的区别是CommonJS行

它们的功能相同吗?是否不需要将值分配给module.exports

/* 1: Assignment to module.exports */
(function(factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD
    define(['jquery'], factory);
  } else if (typeof module === 'object' && module.exports) {
    // CommonJS
    module.exports = factory(require('jquery'));
  } else {
    // Browser globals
    factory(jQuery);
  }
}(function($) {
  $.fn.jqueryPlugin = function () { return true; };
}));

/* 2: Doesn't assign to module.exports */
(function(factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD
    define(['jquery'], factory);
  } else if (typeof module === 'object' && module.exports) {
    // CommonJS
    factory(require('jquery'));
  } else {
    // Browser globals
    factory(jQuery);
  }
}(function($) {
  $.fn.jqueryPlugin = function () { return true; };
}));

tl;dr这并不重要,但通常建议包括
module.exports=…

更详细的解释

我相信您显示的代码中的“更好”版本是设置
模块的版本。导出

module.exports = factory(require('jquery'));
但是,它没有要。通常,使用jQuery插件的方式是通过全局
$
/
jQuery
变量,在这种情况下,不需要
module.exports=…
。jQuery插件的工作原理是:

$.fn.jqueryPlugin = function () { return true; };
但是——原则上——您可以像这样使用插件,直接调用它,而无需通过jQuery:

myjQueryPlugin = require('myjQueryPlugin');
var $myElement = $('#my-element');
myjQueryPlugin.apply($myElement, {});
在这种情况下,您需要设置
module.exports
。请注意,这看起来确实有点奇怪,所以一般来说,大多数人不会像这样使用你的插件

通过设置
module.exports
可以支持这两种用例,而不会丢失任何东西


另请参见:(将插件导出为模块的部分(可选))

tl;dr这并不重要,但通常建议包括
module.exports=…

更详细的解释

我相信您显示的代码中的“更好”版本是设置
模块的版本。导出

module.exports = factory(require('jquery'));
但是,它没有要。通常,使用jQuery插件的方式是通过全局
$
/
jQuery
变量,在这种情况下,不需要
module.exports=…
。jQuery插件的工作原理是:

$.fn.jqueryPlugin = function () { return true; };
但是——原则上——您可以像这样使用插件,直接调用它,而无需通过jQuery:

myjQueryPlugin = require('myjQueryPlugin');
var $myElement = $('#my-element');
myjQueryPlugin.apply($myElement, {});
在这种情况下,您需要设置
module.exports
。请注意,这看起来确实有点奇怪,所以一般来说,大多数人不会像这样使用你的插件

通过设置
module.exports
可以支持这两种用例,而不会丢失任何东西

另请参见:(将插件导出为模块一节(可选))