Как избежать синглтона в узле - PullRequest
0 голосов
/ 29 сентября 2018

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

Файл, который импортирует зависимость:

const dependency = require('dependency');

export class dependencyFactory {

  public static getDependency() {
    return dependency;
  }

}

index.js зависимости в node_modules:

const path = require('path');
const createApi = require('./createApi');

module.exports = createApi(path.join(__dirname, './lib/providers'));

Как я могу это сделать?спасибо.

1 Ответ

0 голосов
/ 29 сентября 2018

Модули приводят к синглетонам в узле.Если это нежелательно, обходной путь всегда зависит от конкретного пакета.

Предпочтительным способом является экспорт фабричной функции или класса конструктора из пакета, который может создавать новые экземпляры при необходимости.

Если этоневозможно, возможные обходные пути могут включать в себя:

  • использование внутренних модулей пакета для создания новых экземпляров
  • аннулирование кэша модуля для повторного импорта пакета
  • получение конструктора класса изсинглтон и создание нового экземпляра

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

Первый обходной путь, кажется, применим здесь.

const createApi = require('dependency/createApi');
const instance = createApi(require.resolve('dependency/lib/providers'));

Более чистое решение состоит в том, чтобы разветвить пакет и добавить возможность создавать несколько экземпляров.

...