Лучший способ внедрить конфиг в модуль - PullRequest
0 голосов
/ 10 мая 2018

Я бы хотел, чтобы мой модуль something.js полагался на конфигурацию, но я не хочу, чтобы require сама конфигурация, и я хотел бы, чтобы мой редактор продолжал анализировать модуль ипоказать автозаполнение.Есть ли чистый способ сделать это?Вот одно решение, которое, к сожалению, смущает редакторов.

class Something {
    constructor (options) {
        ...
    }

    method () {
        ...
    }
}

module.exports = options => module.exports = exports = new Something (options);

И используется:

// First use
const something1 = require ('./something')(options);

// All subsequent uses (expecting something1 to deep equal something2)
const something2 = require ('./something');

1 Ответ

0 голосов
/ 10 мая 2018

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

const _inst = null;

const _init = options => {
  if (!_inst) {
    _inst = new Something(options);
  }
  return _inst;    
}

class Something {
  constructor(options) {
  }

  method() {
  }
}

module.exports = _init;

Первое включение something создаст экземпляр, а затем последующие вызовы (независимо от того, будут ли переданы параметры) всегда будут возвращать один и тот же экземпляр.

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

// First use
const something1 = require ('./something')(options);

// All subsequent uses
const something2 = require ('./something')();

Существует также множество других способов сделать это, то есть многократный экспорт, но приведенный выше, вероятно, наиболее близок к синтаксису, который вам нужен. Если бы у вас был доступ к синтаксису import (который вы могли бы через Babel), то множественный импорт, вероятно, был бы более точным способом, то есть экспортировать функцию init и сам экземпляр.

...