Динамическая инициализация переменной в пакете npm - PullRequest
1 голос
/ 11 марта 2019

У меня есть импортированная библиотека из npm, и некоторые ее части необходимо инициализировать перед использованием, упрощенная версия кода в библиотеке:

export let locale = () => { throw new Error("Must init locale"); }

export initLocale(userLocaleFunction) {
    locale = userLocaleFunction;
}
export checkLocale() {
    console.log(locale());
}

Но при вызове библиотеки следующим образом:

lib = require("lib");
lib.initLocale(() => { return "en" });
lib.checkLocale(); // works as expected: "en"
lib.locale(); // Throws "Must init locale";

lib.locale действует так, как если бы он не был инициализирован. Я не могу initLocale() вернуть локаль, мне нужно, чтобы она была в переменной lib.locale

Можно ли инициализировать переменную таким образом?

1 Ответ

0 голосов
/ 13 марта 2019

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

В моем первом решении я просто возвратил значение:

export initLocale(userLocaleFunction) {
    locale = userLocaleFunction;
    return locale;
}

Но потом понял, что это создает новую проблему: что, если локаль модифицируется внутри библиотеки или, что еще хуже, вне ее?

В духе избегания двух источников истины я закончил с этим:

locale = undefined;
export initLocale(userLocaleFunction) {
    locale = userLocaleFunction;
}
export getLocale() {
    if (locale === undefined) {
        throw new Error("Uninitialized locale");
    }
    return locale;
}

Этот код выполняет проверку is initialized, которая мне сначала понадобилась, и дает значение с одним источником правды.

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