使用 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 变量。