модуль.экспорт не может быть установлен при передаче в качестве аргумента
Я строю свой пакет, используя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 ответ:
В вашем первом примере
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
, так какm
иmodule
указывают на тот же объект.