仅在存在的情况下如何要求模块。反应本机

时间:2018-12-11 11:01:00

标签: javascript react-native ecmascript-6 microsoft-metro bundler

示例:

let tmp;

try {
  tmp = require('module-name');
} catch(e) {
  return;
}

我收到错误消息(反应为本地Metro Bundler):

error: bundling failed: Error: Unable to resolve module `module-name` from ...

仅在存在时如何要求“模块名”?

3 个答案:

答案 0 :(得分:2)

这对我有用:

let myPackage;
const myPackageToRequire = 'my-package-to-require';
try {
  myPackage = require.call(null, myPackageToRequire);
} catch (e) {}

此处需要变量定义const myPackageToRequire = 'my-package-to-require';

希望我能帮上忙。

答案 1 :(得分:0)

使用require.resolve将返回解析的文件名。

function checkModuleAvailability (module) {
  try {
    require.resolve(module);
    return true
  } catch(e) {
    console.log(`${module} not found`);
  }
  return false
}

const moduleAvailable = checkModuleAvailability(MODULE_NAME) // true or false

答案 2 :(得分:0)

通过try-catch加载可选依赖项已经added in Metro 0.59,这意味着如果您在metro.config.js中将其打开,则应该能够在React Native 0.63中使用原始代码:

module.exports = {
  transformer: {
    allowOptionalDependencies: true,
  },
}