Как экспортировать ссылку на объект module.exports в Node.js? - PullRequest
0 голосов
/ 31 марта 2020

В Node.js объект модуля содержит свойство export, которое является пустым объектом. Этот объект может использоваться для ссылки на module.exports ( exports.a = "A"; ), если только он не переназначен ( module.exports = "one"; ).

Мой вопрос - что делает этот объект экспорта ссылкой на module.exports?

1 Ответ

0 голосов
/ 31 марта 2020

Общие JS модули на самом деле довольно просты: вы берете весь код в файл и просто оборачиваете его в функцию. Выполните функцию и верните вызывающей стороне значение module.exports после выполнения.

Вы можете увидеть заголовок этой функции в node.js исходном коде :

const wrapper = [
  '(function (exports, require, module, __filename, __dirname) { ',
  '\n});'
];

Оболочка применяется к коду в файле require 'd и затем вызывается следующим образом :

  const exports = this.exports;
  const thisValue = exports;
  const module = this;
  if (requireDepth === 0) statCache = new Map();
  if (inspectorWrapper) {
    result = inspectorWrapper(compiledWrapper, thisValue, exports,
                              require, module, filename, dirname);
  } else {
    result = compiledWrapper.call(thisValue, exports, require, module,
                                  filename, dirname);
  }

Как видите, это довольно просто. const exports = this.exports, а затем exports передается в качестве аргумента функции-обертки - таким образом, они изначально указывают на одно и то же значение, но если вы переназначаете либо, они больше не будут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...