我有一个主脚本 (publish-all.js),我想从中调用 Angular 项目的 npm publish 脚本,该脚本还有一个子脚本(publish.js 在 ng build
之后执行一般操作(创建文件夹、复制文件、移动文件夹...)。
我需要将一些环境变量传递给第二个脚本。 我正在使用 shelljs 来运行类 Unix 的命令。
我尝试使用:
npm run publish -- VERSION=${productVersion} DESTDIR=${productDestinationPath}
来自 publish-all.js,其中 productVersion 和 productDestinationPath 是在该行上方声明的常量,并从包中调用以下脚本.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')
中,但有以下例外:
由于隐私政策,我不得不隐藏项目文件夹,但它是我正在执行 publish-all.js 的文件夹内的子文件夹。
答案 0 :(得分:1)
环境变量在命令之前执行。因此,您可以在 BEFORE 之前添加它们,而不是在传递它们:
VERSION=${productVersion} DESTDIR=${productDestinationPath} npm run publish
或者, 您可以先导出变量,然后运行脚本:
export VERSION=${productVersion}
export DESTDIR=${productDestinationPath}
npm run publish