ТЛ; др
Не будет. Файл будет доступен, проанализирован и выполнен только один раз.
Функция require
, используемая в nodeJS для импорта кода из других «модулей», использует кэширование. Всякий раз, когда модуль / файл требуется с первого раза, он считывается с диска и «выполняется». Значение, присвоенное module.exports
в файле, возвращается из вызова функции require, а также кэшируется в require.cache
. Всякий раз, когда тот же самый модуль / файл требуется снова, в процессе, вместо этого возвращается кэшированная копия.
Пример кода, который вы предоставили, не будет работать так, как вы ожидаете. Ни один из var
s, function
s или class
es, объявленный в файле JS, не добавляется в глобальную область (в nodeJS). Требуя файл, автоматически не добавляет символы, объявленные в этом файле, в «текущую» область (в отличие от Python). В файле, который потребуется в другом месте, вы должны явно экспортировать один или несколько «объектов», назначив его module.exports
или exports
. В свете этого ваш class_definition.js должен выглядеть примерно так:
class myclass
{
constructor(a)
{
this.a = a;
}
}
module.exports = myclass;
Тогда вам потребуется и использовать его в ваших различных файлах экземпляров, таких как:
const MyClassLocally = require("class_definition.js");
module.exports = function()
{
return new MyClassLocally(1);
};
Обратите внимание, что для построения объекта в этом файле вы будете использовать имя, которое вы дали локальной переменной, в которой хранилось возвращаемое значение из require("class_definition.js")
. Символ myclass
как таковой никогда не добавлялся в текущую область, только объект (все, что содержит класс, является внутренним объектом), который символ myclass
указывал на кэширование и возвращение по требованию. Вы, конечно, можете заменить const MyClassLocally = require("class_definition.js");
на const myclass = require("class_definition.js");
, если хотите использовать то же имя.