作为参数传入时,无法设置module.exports

时间:2016-03-04 16:14:01

标签: javascript browserify commonjs

我正在使用Browserify构建我的包。

我有以下service.js

(function (exports, require) {

     // ...
     var Service = function (name, region) {
         this.name = name;
         this.region = region;
         // ...
     }

     exports = Service;

})(module.exports, require);

每当我在另一个模块上尝试require('./service')时,我会得到一个空对象,好像从未设置过exports个对象一样。

如果我在没有参数封装的情况下使用module.exports,一切正常:

(function (require) {

   // ...
     var Service = function (name, region) {
         this.name = name;
         this.region = region;
         // ...
     }

     module.exports = Service;

})(require);

为什么会发生这种情况?为什么需要这样做?

1 个答案:

答案 0 :(得分:2)

在您的第一个示例中,example是您的匿名函数范围内的变量,它指向module.exports。当您说exports = Service时,您正在更改 exports 指向的内容,而不是 module.exports 指向的内容。

当您说module.exports = Service时,您正在更改module的属性,该属性是全局范围的。

另外一个例子:

(function (m, require) {

    // ...
    var Service = function (name, region) {
        this.name = name;
        this.region = region;
        // ...
    }

    m.exports = Service;

})(module, require);

m指向module,当我们设置m.exports时,我们设置module.exports,因为mmodule指向同一个对象。