动态初始化为npm包中的变量

时间:2019-03-11 13:19:11

标签: javascript npm

我从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 :(得分:0)

似乎在库中初始化变量时,它仅在库范围内。

在第一个解决方案中,我只返回了值:

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检查,并提供具有真实性来源的值。