Модули приводят к синглетонам в узле.Если это нежелательно, обходной путь всегда зависит от конкретного пакета.
Предпочтительным способом является экспорт фабричной функции или класса конструктора из пакета, который может создавать новые экземпляры при необходимости.
Если этоневозможно, возможные обходные пути могут включать в себя:
- использование внутренних модулей пакета для создания новых экземпляров
- аннулирование кэша модуля для повторного импорта пакета
- получение конструктора класса изсинглтон и создание нового экземпляра
Все они могут рассматриваться как хаки, и их следует по возможности избегать.Например, использование внутренней структуры пакета может привести к критическим изменениям в новой версии пакета, даже если журнал изменений пакета не предполагает критических изменений.И ловушкой для аннулирования кэша является то, что пакет может состоять из множества модулей, которые должны или не должны быть повторно импортированы.
Первый обходной путь, кажется, применим здесь.
const createApi = require('dependency/createApi');
const instance = createApi(require.resolve('dependency/lib/providers'));
Более чистое решение состоит в том, чтобы разветвить пакет и добавить возможность создавать несколько экземпляров.