有条件地需要javascript中的模块

时间:2017-04-17 14:22:48

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

我正在按预期输入条件(由控制台证明,如果process.env.BROWSER === true只在if语句中命中,但如果process.env.BROWSER === true,if语句中的require仍然会被命中。或process.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'));
        });
    }

1 个答案:

答案 0 :(得分:0)

我遇到了与上面相同的问题,但是使用了nodejs并做出了原生的反应。

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

React native不允许条件要求,我认为静态分析在之前加载所有需要。