4

Webpack 生成以下 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.

4

1 回答 1

6

根据@sokra 的评论

有两种不同的 CommonJs 规范。CommonJS strict 只有exports,没有module.exports。Node.js 添加了 module.exports 但这不是原始规范的一部分。

这个 commonjs规范指出:

  • 在模块中,有一个名为“exports”的自由变量,它是模块在执行时可以添加其 API 的对象。模块必须使用“exports”对象作为导出的唯一方式

这就是 webpack 通过exports对象导出依赖的原因:

else if(typeof exports === 'object')
    exports["rx-core-libs"] = factory()
于 2017-11-22T07:27:54.663 回答