Круговые зависимости - упражнение из книги Eloquent Javascript - PullRequest
1 голос
/ 24 сентября 2019

Я пытаюсь понять, как работает этот код: (Это упражнение из книги Eloquent Javascript. http://eloquentjavascript.net/10_modules.html#i_E/zWqBFdy8)

require.cache = Object.create(null);

function require(name) {
  if (!(name in require.cache)) {
    let code = readFile(name);
    let module = {exports: {}};
    require.cache[name] = module;
    let wrapper = Function("require, exports, module", code);
    wrapper(require, module.exports, module);
  }
  return require.cache[name].exports;
}

// Example:

// a.js
const {b} = require('./b');
console.log(b);
exports.a = 'a';

// b.js
const {a} = require('./a');
console.log(a);
exports.b = 'b';

В книге говорится, что: «Многие модульные системы просто запрещают это (циркулярзависимостей) потому что, какой бы порядок вы ни выбрали для загрузки таких модулей, вы не можете убедиться, что зависимости каждого модуля были загружены до его запуска. "

И решение таково:" Требуется добавить модули в свой кэш, прежде чем он начнет загружатьсятаким образом, если какой-либо вызов require, сделанный во время его работы, попытается загрузить его, он уже известен, и будет возвращен текущий интерфейс, вместо того, чтобы начать загружать модуль еще раз. "

У меня возникают проблемы с пониманием того, что подразумевается под порядком загрузки модулей и почему мы не уверены, загружены ли зависимости, поскольку код является синхронным. В конечном счете, я не уверен, как взаимодействует код в двух модулях, которые я добавил в качестве примера.

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