Javascript npm包中的动态init to变量

Javascript npm包中的动态init to变量,javascript,npm,Javascript,Npm,我有一个从npm导入的库,它的某些部分在使用前需要初始化,这是库中代码的简化版本: export let locale = () => { throw new Error("Must init locale"); } export initLocale(userLocaleFunction) { locale = userLocaleFunction; } export checkLocale() { console.log(locale()); } 但当以以下方式调用

我有一个从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


可以用这种方式初始化变量吗?

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

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

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;
}

这段代码执行我首先需要的
初始化检查
并给出一个真值来源的值。

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

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

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;
}

这段代码执行
初始化时的检查
我首先需要检查,并给出一个真值来源的值。

尝试将“let”改为“const”。事实上,let是一个范围有限的声明。另外,您在initLocale中重新分配了locale,因此可能只是覆盖了它。您是否可以控制导入的包?@Vinz243我可以控制它-我正在从较旧的js版本迁移它-这意味着许多代码依赖lib.locale来查看它does@Webwoman我编辑了这篇文章,以便更清楚地强调这个问题——我确实这样做了初始化变量并期望它返回“en”,但我得到的是初始值——“必须初始化语言环境”是否尝试更改
let
var
?尝试更改“let”的“const”。事实上,let是一个范围有限的声明。另外,您在initLocale中重新分配了locale,因此可能只是覆盖了它。您是否可以控制导入的包?@Vinz243我可以控制它-我正在从较旧的js版本迁移它-这意味着许多代码依赖lib.locale来查看它does@Webwoman我编辑了这篇文章,以便更清楚地强调这个问题——我确实这样做了初始化变量并期望它返回“en”,但我得到的是初始值——“必须初始化语言环境”您是否尝试更改
let
for
var