我正在使用
Browserify构建我的包.
我有以下service.js:
(function (exports, require) {
// ...
var Service = function (name, region) {
this.name = name;
this.region = region;
// ...
}
exports = Service;
})(module.exports, require);
每当我尝试在另一个模块上要求(‘./ service’)时,我得到一个空对象,好像从未设置过导出对象一样.
如果我在没有参数封装的情况下使用module.exports,一切正常:
(function (require) {
// ...
var Service = function (name, region) {
this.name = name;
this.region = region;
// ...
}
module.exports = Service;
})(require);
为什么会发生这种情况?为什么需要这样做?
最佳答案 在您的第一个示例中,示例是您的匿名函数范围内的变量,它指向module.exports.当你说exports = Service时,你正在改变导出指向的内容,而不是module.exports所指向的内容.
当您说module.exports = Service时,您正在更改模块的属性,该属性是全局范围的.
另外一个例子:
(function (m, require) {
// ...
var Service = function (name, region) {
this.name = name;
this.region = region;
// ...
}
m.exports = Service;
})(module, require);
m指向模块,当我们设置m.exports时,我们设置module.exports,因为m和module指向同一个对象.