检测具有节点的系统路径上是否存在可执行文件

时间:2014-09-29 00:28:55

标签: windows node.js unix cross-platform npm

问题

是否有一种简单的方法可以使用节点判断系统路径上是否有系统可执行文件?例如,如果用户在/usr/bin/python安装了python并且/usr/bin位于$PATH,我该如何在Node中检测到?反过来检测什么时候没有安装或者不在路上,即/usr/opt/local/mycustompath/python?理想情况下希望他们是一个npm包...

我确信这是一个使用正确搜索词的快速谷歌搜索,但由于事实在哪里以及哪些是非常通用的搜索词,我失败了。

背景

我正在为节点工具开发一些dev配置,并希望能够检测路径上是否已经有python(或pip),如果没有,请让用户告诉安装它或告诉我们在哪里找到它。我目前正在计划在Windows机器上使用where和在* nix机器上which执行此操作,但希望可能有单一的跨平台方式来执行此操作。

2 个答案:

答案 0 :(得分:1)

软件包hasbin已发布到npm注册表中,该注册表提供了以下功能:

使用npm install hasbin

安装(作为项目的一部分)

要测试Python的可用性,请按以下方式使用它(不要在可执行文件名后附加.exe

var isPyAvailable = require('hasbin').sync('python')

该软件包还提供了许多其他有用的方法,例如能够在几种方法中找到 first 个可用二进制文件-参见its GitHub repository

答案 1 :(得分:0)

你必须找到一种方法,因为没有"泛型"或"开箱即用"这样做的方法。

一种方法是,您可以使用检查是否通过软件包管理器安装了所需的软件包/二进制文件,然后您可以使用utility whereis尝试在标准Linux列表中找到所需的程序地点,列在$PATH

当然,您也可以使用实用程序which,但whereis提供了更多信息。您可以查看whichwhereis here的差异。

一般来说,在您的示例中,用户可能已在某个随机位置手动安装了某个程序包,但未在$PATH中列出。 这样就无法检查软件包是否安装,而是尝试在完整的文件系统树中查找二进制名称或相关文件。