Javascript 如何捕获`require()`异常以检查是否安装了模块?

Javascript 如何捕获`require()`异常以检查是否安装了模块?,javascript,node.js,react-native,Javascript,Node.js,React Native,我已经尝试了几个小时来检查是否安装了节点包,以根据这一点调整我的react本机库的行为。 我尝试了一个简单的try/catch,但我不知道为什么,“无法解析模块”异常绝对没有被捕获 try { var Expo = require('expo'); } catch (e) { console.log('Module is not installed'); console.error(e); } 如何捕获require()“无法解析模块”异常,或者是否有其他方法检查模块是否已安装 谢

我已经尝试了几个小时来检查是否安装了节点包,以根据这一点调整我的react本机库的行为。 我尝试了一个简单的try/catch,但我不知道为什么,“无法解析模块”异常绝对没有被捕获

try {
  var Expo = require('expo');
} catch (e) {
  console.log('Module is not installed');
  console.error(e);
}
如何捕获
require()
“无法解析模块”异常,或者是否有其他方法检查模块是否已安装


谢谢

Require
是同步的,因此错误处理必须遵循传统的Javascript错误处理模式,即使这看起来很奇怪:

try {
    var Expo = require('./123/1234/154.js') //obviously not going to work
    console.log("Installed successfully")
}
catch (e) {
    console.log('ERROR: ')
    console.log(e)
}

一般来说,您不应该在这种情况下使用try-catch,因为如果模块安装/找到不正确,您希望应用程序失败。

Require
是同步的,因此错误处理必须遵循传统的Javascript错误处理模式,即使它看起来很奇怪:

try {
    var Expo = require('./123/1234/154.js') //obviously not going to work
    console.log("Installed successfully")
}
catch (e) {
    console.log('ERROR: ')
    console.log(e)
}

一般来说,您不应该在这种情况下使用try-catch,因为如果模块未正确安装/找到,您希望您的应用程序失败。

尝试将其更改为
var m=require('module1234')
,因为AFAIK
module
是一个有效的模块名称,因此不会发生异常。我的坏消息,
module
就是一个例子,我不知道它的存在。我已经用我的实际用例更新了我的示例。我想检查用户是否安装了
expo
软件包,但即使有
try…catch
子句,我仍然会看到致命的js红屏,出现“无法解析模块”异常。查找要求.resolve。我不能测试,但认为它返回null,因为它不能解析模块,而不是抛出异常。可能是错误的。我已经测试了
require.resolve
,但它在react native上不起作用(或者我需要一个包来使用它吗?)。它给了我
require.resolve不是一个函数
Ok,我认为
模块
是问题所在,但我还是在VS代码中尝试了你的代码,它按预期工作。如果您能提供更多关于您的环境的信息,请尝试将其更改为
var m=require('module1234')
,因为AFAIK
module
是一个有效的模块名,因此不会发生异常。我的坏,
module
只是一个例子,我不知道它存在。我已经用我的实际用例更新了我的示例。我想检查用户是否安装了
expo
软件包,但即使有
try…catch
子句,我仍然会看到致命的js红屏,出现“无法解析模块”异常。查找要求.resolve。我不能测试,但认为它返回null,因为它不能解析模块,而不是抛出异常。可能是错误的。我已经测试了
require.resolve
,但它在react native上不起作用(或者我需要一个包来使用它吗?)。它给了我
require.resolve不是一个函数
Ok,我认为
模块
是问题所在,但我还是在VS代码中尝试了你的代码,它按预期工作。也许你能提供更多关于你的环境的信息?