我有一个简单的命令来运行nodejs程序,设置了动态环境变量:
pnpm exec dotenv -v DATABASE_URL=$(pnpm exec ts-node ./getDatabaseUrl.ts) -- pnpm -C backend run migrate:dev:main
它执行getDatabaseUrl.ts
脚本并使用dotenv-cli将结果分配给环境变量,然后执行下一个脚本(pnpm -C backend run migrate:dev:main
),DATABASE_URL
env var将可用。
当我在PowerShell 7.3.4下运行它时,它工作得很好,但是当我把它放在package.json
中时,它就不工作了:
{
"scripts": {
"migrate:dev:main": "pnpm exec dotenv -v DATABASE_URL=$(pnpm exec ts-node ./getDatabaseUrl.ts) -- pnpm -C backend run migrate:dev:main"
}
}
显示这样的错误:Unexpected argument DATABASE_URL=$(pnpm. Expected variable in format variable=value
如何使此命令从package.json
脚本工作?我也试过在没有pnpm
的情况下这样做:
{
"scripts": {
"migrate:dev:main": "dotenv -v DATABASE_URL=$(pnpm exec ts-node ./getDatabaseUrl.ts) -- pnpm -C backend run migrate:dev:main"
}
}
但它无论如何都不工作,错误:-- was unexpected at this time.
或类似于此(类似错误):
{
"scripts": {
"migrate:dev:main": "dotenv -v DATABASE_URL=$(pnpm exec ts-node ./getDatabaseUrl.ts) pnpm -C backend run migrate:dev:main"
}
}
错误:pnpm was unexpected at this time.
1条答案
按热度按时间3yhwsihp1#
npm
的默认脚本shell是cmd.exe
(源代码)。您可能正在使用这个默认值,因为
$(...)
不会被计算。您可以通过多种方式解决问题:1.将脚本shell更改为
pwsh
(docs):使用绝对路径,如果
pwsh
不在你的路径中,e. g."C:\\path\\to\\pwsh.exe"
1.使用PowerShell * 显式 * 执行命令。这将在两个脚本shell中工作,
cmd
和pwsh
/powershell
: