Javascript 如何仅在存在模块时才要求模块。自然反应

Javascript 如何仅在存在模块时才要求模块。自然反应,javascript,react-native,ecmascript-6,microsoft-metro,bundler,Javascript,React Native,Ecmascript 6,Microsoft Metro,Bundler,例如: let tmp; try { tmp = require('module-name'); } catch(e) { return; } 我收到错误(react native Metro Bundler): 如何仅在存在时要求“模块名”?使用该选项将返回解析的文件名 function checkModuleAvailability (module) { try { require.resolve(module); return true } catch(

例如:

let tmp;

try {
  tmp = require('module-name');
} catch(e) {
  return;
}
我收到错误(react native Metro Bundler):

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

使用该选项将返回解析的文件名

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

这对我来说很有用:

let myPackage;
const myPackageToRequire = 'my-package-to-require';
try {
  myPackage = require.call(null, myPackageToRequire);
} catch (e) {}
变量定义
const myPackageToRequire='my package to require'在这里是必需的


希望我能帮上忙。

通过try-catch加载可选依赖项已经完成,这反过来意味着您应该能够在React-Native 0.63中使用原始代码,如果您在
metro.config.js中打开它的话:

module.exports={
变压器:{
allowOptionalDependencies:true,
},
}

Try
require.resolve(软件包名称)
@PritishVaidya不工作((相同错误)当我用我的节点模块中绝对有的模块测试此功能时(InApp Browser reborn),我得到:未知命名模块:“react native InApp Browser reborn”.Hello@Petr Bela,我需要使用可选的依赖项。我已经这样做了,但仍然没有任何更改。你能给我解释一下吗?它对Metro Bundler不起作用。你可能会有
[TypeError:\u$$$\ u REQUIRE.resolve不是一个函数。(在“\u$\ u REQUIRE.resolve('package-name')”中,“\u$$\ u REQUIRE.resolve”是未定义的)
let myPackage;
const myPackageToRequire = 'my-package-to-require';
try {
  myPackage = require.call(null, myPackageToRequire);
} catch (e) {}