在节点package.json
文件中,您可以在全局NPM安装(PATH
)上将多个可执行文件映射到npm install -g
环境变量:
"bin": {
"foo": "./bin/foo.js",
"bar": "./bin/bar.js"
},
我有一个独特的项目,需要在没有它的操作系统上映射现有的PATH
变量。例如,我想要将名为grep
的命令添加到PATH
,当且仅当安装在Windows计算机上时。如果计算机正在运行任何其他操作系统,则NPM安装显然会失败。
有没有办法运行预先确定安装中可用的bin
选项的逻辑?
这会有效吗?
npm
(程序化版本)作为依赖项。package.json
中声明的安装后脚本。npm install -g
(每个命令一个,例如grep
)。 这需要一段时间,npm
模块很大,但看起来它会起作用。否?
答案 0 :(得分:1)
似乎没有办法通过package.json
直接执行此操作,但可能(并且可取)执行以下操作:
PATH
/ executable值。package.json
字段,将其限制为在Windows上安装。os
。通过这种方式,如果有人在Windows上安装原始模块,它将安装 my-win-grep ,这将注册一个可执行文件以在optionalDependency
命令下运行。
对于其他系统上的用户,由于grep
要求, my-win-grep 模块将无法安装,但主模块将继续安装,因为它忽略了{下的故障{1}}。因此原始的os
可执行文件将保持不变。
更新了问题
这种方法听起来应该可行 - 正如你所说,npm依赖性相当大,但它确实避免了必须预先形成额外的符号链接,并且仍然具有上面概述的每个操作系统特定功能的优点。单独的模块。
唯一需要关注的是程序化的npm文档:
您无法单独为任何单个npm函数设置配置 这次。因为npm是一个单例,所以对npm.config.set的任何调用都会 更改该进程中所有npm命令的值
因此,这可能只是意味着您无法在安装时指定optionalDependencies
,而是必须在首次安装之前全局设置它。这不应该是一个问题,但你可能需要测试它才能找到确切的结果。
<强>最后... 强>
您可能还想查看https://github.com/lastboy/package-script - 即使您不使用它,也可能会为您的实施提供一些灵感。