将命令行参数从 NPM 脚本传递给 NodeJS 脚本

时间:2021-07-12 07:39:36

标签: javascript node.js npm

我有一个主脚本 (publish-all.js),我想从中调用 Angular 项目的 npm publish 脚本,该脚本还有一个子脚本(publish.jsng build 之后执行一般操作(创建文件夹、复制文件、移动文件夹...)。

我需要将一些环境变量传递给第二个脚本。 我正在使用 shelljs 来运行类 Unix 的命令。

我尝试使用:

npm run publish -- VERSION=${productVersion} DESTDIR=${productDestinationPath}

来自 publish-all.js,其中 productVersionproductDestinationPath 是在该行上方声明的常量,并从包中调用以下脚本.json:

"publish": "ng build --prod && node ./scripts/publish.js"

但我得到的实际命令行是

ng build --prod && node ./scripts/publish.js "VERSION=value" "DESTDIR=value"

最后,在我的 publish.js 脚本中,我尝试通过以下方式获取这些变量:

let version = process.env.VERSION;
let destinationPath = process.env.DESTDIR;

但我得到 undefined 值。

我做错了什么?是否有更好的方法来做这一切?
我应该改用 process.argv 吗??

我正在使用这个策略,因为这是我被告知要做的,但我想知道是否有一种不那么令人困惑的方法。ç


编辑 2021-07-13

我尝试使用导出(使用 shelljs,因为我在 Windows 中并使用 powershell)但我遇到了一个例外。 我现在在 publish-all.js 中有以下代码:

shelljs.exec(`export VERSION=${productVersion}`);
shelljs.exec(`export DESTDIR=${productDestinationPath}`);
shelljs.exec('npm run publish');

在来自 ANGULAR 项目的 publish.js 脚本中:

version = process.env.VERSION;
destinationPath = process.env.DESTDIR;

虽然它没有进入publish.js。它卡在 shelljs.exec('npm run publish') 中,但有以下例外:

Exception screenshot, which says: Error: ENOENT: no such file or directory, stat 'project folder/node.exe'

由于隐私政策,我不得不隐藏项目文件夹,但它是我正在执行 publish-all.js 的文件夹内的子文件夹。

1 个答案:

答案 0 :(得分:1)

环境变量在命令之前执行。因此,您可以在 BEFORE 之前添加它们,而不是在传递它们:

VERSION=${productVersion} DESTDIR=${productDestinationPath} npm run publish

或者, 您可以先导出变量,然后运行脚本:

export VERSION=${productVersion}
export DESTDIR=${productDestinationPath}
npm run publish