0

我有一个来自我的包所依赖的 C 库的 .exe 文件。当用户的 PATH 中已经包含此命令时,我的包可以正常工作。但是当用户安装我的包时,有什么方法,NPM 也从这个 C 库安装这个命令?我试图在 package.json 的 bin 中包含 .exe 文件,当全局安装我的包时,此命令可用于提示。但不适用于 child_process.spawn。当我的代码尝试使用它时,我收到一个错误:

Error: spawn fpcalc ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:267:19)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
Emitted 'error' event on ChildProcess instance at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:273:12)
at onErrorNT (internal/child_process.js:469:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
errno: 'ENOENT',
code: 'ENOENT',
syscall: 'spawn fpcalc',
path: 'fpcalc',

// 编辑

基本上我需要在我的包安装时设置一个 PATH 变量,因此命令“fpcalc”将可用于 child_process

4

1 回答 1

0

我找到了解决问题的方法。实际上在 package.json 上包含一个 .exe 是可行的!问题实际上出在方法 child_process.spawn 上。出于某种原因,它不执行外部命令,至少我尝试过。所以我最终使用了 child_process.exec 并且工作正常。

// package.json
{
 "bin": {
      "your-command": "file_path.exe"
 }
}

顺便说一句,我创建了一个库,它实现了一个 C 库来识别音乐。在这里查看更多。

于 2020-11-16T20:12:09.990 回答