我正在开发一个节点模块,我必须检查用户是否安装了特定的软件包(这是我必须遵循的逻辑),如果没有,请使用child_process.exec
安装
出现问题的地方,即使我的脚本安装了包(node_modules
包含它,也是package.json
),如果我再次拨打require.resolve
,它会说模块不存在。
对于我发现的(来自节点github问题),节点有一个"缓存",其中在第一次调用时,如果未安装包,则此包的缓存条目设置为一个随机值,它不是它的路径。然后,当您安装并尝试再次调用它时,它会调用该缓存条目。
是否有其他方法可以检查软件包是否已安装,或者我的本地节点安装是否已损坏?
答案 0 :(得分:1)
检查软件包是否已安装的一种方法是尝试require
它。请参阅下面的代码,验证是否未安装软件包。只需在注释现在安装缺少的包之后添加安装它的代码。
try {
require('non-existent-package');
} catch (error) {
// return early if the error is not what we're looking for
if (error.code != 'MODULE_NOT_FOUND') {
throw error;
}
// now install the missing package
}
让我知道这是否有效。
答案 1 :(得分:1)
查看node.js require() cache - possible to invalidate?
可以使用以下内容清理require
缓存:
delete require.cache[require.resolve('./module.js')]