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