Что происходит, когда модуль требуется более чем одному файлу в Node.js? - PullRequest
0 голосов
/ 28 июня 2018

Например, если существует один файл foo.js с переменной x , который инициализируется номером 1. x - это module.export - редактировать из файла. Теперь, если foo.js требуется в двух других файлах javascript, и значение x изменяется в обоих этих файлах со значениями 5 и 10 соответственно. Что именно происходит в этой ситуации? Существуют три разные копии x или только один x, и в зависимости от того, какой файл был запущен последним, x будет содержать это значение?

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Если x является неизменным значением, то оно будет передано обоим этим файлам как 1 в вашем сценарии. Если вы измените x позже в других файлах. Оригинал x не изменится.

// foo.js
let x = 1;
setTimeout(() => {
    console.log('original: ', x);
}, 1000);
module.exports = x;

//a.js
let x = require('../lib/foo');
x = 2;
console.log('required x: ', x);

//output
require x:  2
original:  1

Если x является изменяемым значением, то независимо от того, где оно будет изменено, оно будет действовать на все x, где оно используется.

// foo.js
let x = {
    a: 1
};
setTimeout(() => {
    console.log('original: ', x);
}, 1000);
module.exports = x;

//a.js
let x = require('../lib/foo');
x.a = 2;
console.log('required x: ', x);

//output
require x:  {a: 2}
original:  {a: 2}
0 голосов
/ 28 июня 2018

На самом деле это зависит от того, является ли x ссылочным типом или типом значения. Если x является ссылочным типом, то изменение его свойства в одном файле отражается в другом файле.

В вашем примере x является типом значения, поэтому при изменении его значения создается его копия.

0 голосов
/ 28 июня 2018

Вызовы метода require () кэшируются, поэтому не должно быть большой разницы Кроме того, вызовы require () блокируются, поэтому, когда они обрабатываются, Node больше ничего не выполняет.

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