由`如果(typeof运算出口===“对象”)`在UMD定义

由`如果(typeof运算出口===“对象”)`在UMD定义

问题描述:

的WebPack生成以下定义UMD预计在什么环境:由`如果(typeof运算出口===“对象”)`在UMD定义

(function webpackUniversalModuleDefinition(root, factory) { 
    // this is CommonJS/Node 
    if(typeof exports === 'object' && typeof module === 'object') 
     module.exports = factory(); 
    // this is AMD 
    else if(typeof define === 'function' && define.amd) 
     define([], factory); 
    // what is this environment or standard? 
    else if(typeof exports === 'object')  <------------- ??? 
     exports["rx-core-libs"] = factory(); 
    // Window/Global 
    else 
     root["rx-core-libs"] = factory(); 
}) 

我的问题是,这是什么标准或环境?

else if(typeof exports === 'object') 

这就像CommonJS但没有module

根据this comment由@sokra:

有两种不同的规格CommonJS的。 CommonJS严格只有 导出并且没有module.exports。 Node.js添加了module.exports,但这不是原始规范的一部分。

This commonjs规范规定:

  • 在模块中,有一个名为“出口”*变量,这是一个 对象,该模块可以将其API增加,因为它执行。 模块必须 使用“出口”对象作为唯一的出口手段

这就是为什么通过的WebPack对象exports出口的依赖关系:

else if(typeof exports === 'object') 
    exports["rx-core-libs"] = factory()