【问题标题】:Conditionally require modules in javascript在javascript中有条件地需要模块
【发布时间】:2017-04-17 14:22:48
【问题描述】:

我正在按预期输入条件(正如控制台所证明的那样,该控制台仅在 if 语句 if process.env.BROWSER === true 中被命中,但 if 语句中的 require 仍然在 process.env.BROWSER === trueprocess.env.BROWSER === false 时被命中这是process.env.BROWSER === false时的错误。如果我注释掉第一个要求,那么process.env.BROWSER === false时没有错误。

我怀疑在编译 JS 时会以某种方式调用所有要求,但如果是这种情况,我如何有条件地要求一个模块?这里到底发生了什么?

if (process.env.BROWSER) {
    language['ES'].push(require('promise?global,locale-es-ES!react-intl/locale-data/es'));
} else{
    language['ES'].push(function () {
      return Promise.resolve(require('react-intl/locale-data/es'));
    });
}

像这样使用 module.require 在 react-native 中有效,但在浏览器中会抛出 TypeError: module.require is not a function

if (process.env.BROWSER) {
    language['ES'].push(module.require('promise?global,locale-es-ES!react-intl/locale-data/es'));
} else{
    language['ES'].push(function () {
      return Promise.resolve(require('react-intl/locale-data/es'));
    });
}

试图找到对这样的模块的引用会给出TypeError: Cannot read property 'require' of undefined

if (process.env.BROWSER) {
        language['ES'].push(require('react-intl').module.require('promise?global,locale-es-ES!react-intl/locale-data/es'));
    } else{
        language['ES'].push(function () {
          return Promise.resolve(require('react-intl/locale-data/es'));
        });
    }

【问题讨论】:

    标签: javascript node.js reactjs if-statement react-native


    【解决方案1】:

    我遇到了与上面相同的问题,但使用的是 nodejs 和 react native。

    我通过在 nodejs 模块中使用 module.require() 克服了这个问题。尝试是否可以在您的情况下执行此操作(或任何方式避免直接require 用于浏览器情况)。

    React Native 不允许有条件的 require,我认为之前加载所有 require 的静态分析。

    【讨论】:

    • 感谢您的回复!我在 react-native 中也遇到了这个错误。看起来为了使用 module.require(),我必须从 react-intl 显式导出module。那是你必须做的吗? nodejs.org/api/modules.html#modules_module_require_id
    • 我的意思只是将 require 用于 react-native 和 module.require 用于其他环境。对我来说,nodejs 允许我做条件要求,只有 react-native 阻止了它。
    • 你是如何使用 module.require 却没有得到 TypeError: module.require is not a function
    • 您是如何获得对模块的引用以使用 module.require 的? p.s.我更新了问题以显示我在尝试此操作时看到的内容。
    猜你喜欢
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    相关资源
    最近更新 更多