使用 commander.js 从 Node.js CLI 调用打包的 bash 脚本
Invoke packaged bash script from Node.js CLI using commander.js
我正在尝试使用 commander.js 编写 CLI。我想让 CLI 中的某个命令调用以前编写的 bash 脚本,并将参数传递给它。我知道我可以在 "index.js
":
中使用 shell.exec()
shellCommand = `./RunScripts/bashScript.sh ${options.option1} ${options.option2}`;
if (shell.exec(shellCommand).code !== 0) {
// ...do things
}
这意味着我需要在发布 CLI 时将 bash 脚本包含在我的程序包中。使用 npm pack --dry-run
,我可以看到脚本确实包含在包中。这是我这里的文件系统的粗略概述:
├── my-cli-directory
│ ├── README.md
│ └── RunScripts
│ └── bashScript.sh
│ ├── package.json
│ └── index.js
当我发布我的 CLI 并尝试使用 npm install ...
下载它时,它给我一条错误消息,如下所示:
/bin/sh: ./RunScripts/bashScript.sh: No such file or directory
这是有道理的,因为我正试图告诉 shell.exec
到 运行 在该位置应该可用的东西。相反,我如何告诉 shell.exec
到 运行 使用我的 CLI 打包的脚本?
我通过更改引用 bash 脚本位置的方式解决了这个问题。
而不是:
shellCommand = `./RunScripts/bashScript.sh ${options.option1} ${options.option2}`;
我运行:
shellCommand = `${__dirname}/RunScripts/bashScript.sh ${options.option1} ${options.option2}`;
我完全忘记了 __dirname
变量。
我正在尝试使用 commander.js 编写 CLI。我想让 CLI 中的某个命令调用以前编写的 bash 脚本,并将参数传递给它。我知道我可以在 "index.js
":
shell.exec()
shellCommand = `./RunScripts/bashScript.sh ${options.option1} ${options.option2}`;
if (shell.exec(shellCommand).code !== 0) {
// ...do things
}
这意味着我需要在发布 CLI 时将 bash 脚本包含在我的程序包中。使用 npm pack --dry-run
,我可以看到脚本确实包含在包中。这是我这里的文件系统的粗略概述:
├── my-cli-directory
│ ├── README.md
│ └── RunScripts
│ └── bashScript.sh
│ ├── package.json
│ └── index.js
当我发布我的 CLI 并尝试使用 npm install ...
下载它时,它给我一条错误消息,如下所示:
/bin/sh: ./RunScripts/bashScript.sh: No such file or directory
这是有道理的,因为我正试图告诉 shell.exec
到 运行 在该位置应该可用的东西。相反,我如何告诉 shell.exec
到 运行 使用我的 CLI 打包的脚本?
我通过更改引用 bash 脚本位置的方式解决了这个问题。
而不是:
shellCommand = `./RunScripts/bashScript.sh ${options.option1} ${options.option2}`;
我运行:
shellCommand = `${__dirname}/RunScripts/bashScript.sh ${options.option1} ${options.option2}`;
我完全忘记了 __dirname
变量。