从命令行传递环境变量给yarn

28

我有一段代码可以从环境变量或配置中读取端口号。代码如下:

const port = process.env.PORT || serverConfig.port;
await app.listen(port);

为了在不定义环境变量的情况下运行该应用程序,我运行以下yarn命令。

yarn start:dev

这个命令可以在Linux shell和Windows命令行中成功运行。

现在,我想传递环境变量。我尝试了以下方法:

PORT=2344 yarn start:dev

这个命令可以在Linux shell中成功运行,但无法在Windows命令行中运行。我尝试了以下方法却无法使其工作。

尝试:PORT=2344 yarn start:dev

我得到错误:'PORT' 不是内部或外部命令,也不是可运行的程序或批处理文件。

尝试:yarn PORT=2344 start:dev

我得到错误:yarn run v1.17.3
错误:找不到命令“PORT=2344”。
信息:请访问https://yarnpkg.com/en/docs/cli/run了解此命令的文档。

有任何想法吗?我知道可以从Windows的系统属性中定义环境变量。但是否有办法可以通过命令行来定义?

7个回答

21

我建议您使用名为cross-env的NPM模块。它允许在命令行上添加特定的环境变量,无论平台如何。因此,您可以尝试以下操作:

$ cross-env PORT=2344 yarn start:dev

7
你可以在Windows命令提示符中使用&(或&&)链接命令。要设置环境变量,需要使用set命令。
结果应该如下所示:set PORT=1234 && yarn start:dev

嗨 - 小心在 yarn 3.x 上这个语法可能无效。应该使用 cross-env 代替。 - Jose Marcenaro

2

.env文件放在根目录。然后运行以下命令将公开.env文件的内容,然后运行yarn start command

$ source .env && yarn start

或者使用这个命令。
$ export $(cat .env) && yarn start

如果更新了.env文件中的任何变量,则关闭终��并打开一个新的终端窗口,然后可以再次运行上面的命令。或者也可以运行unset命令来删除现有的变量。
unset VAR_NAME

3
如果您使用“source .env”方法,则可能需要在.env文件中添加“export”到变量,例如“export ENV_VAR=123”。 - PulpDood

1
在Windows命令提示符中找到了解决此问题的方法。
  1. 在项目根目录(src文件夹之外)中创建一个.env文件。

  2. 在其中定义PORT。在我的情况下,.env文件的内容如下:

PORT=2344

  1. 运行 yarn start:dev

  2. 应用程序将使用您在 .env 文件中指定的端口号。


6
我认为这只有在使用dotenv模块的情况下才有效,该模块不是默认安装的。 - Alexis Wilke

0

仅供参考(不是直接回答)。我正在尝试在VS Code中通过yarn将.env变量传递给JavaScript应用程序。Google上的示例非常少,因此我分享这个内容以备后人参考,因为它与此有些相关。

以下代码简单地替换通常直接放置在package.json或脚本文件中的文本。使用此功能可以快速混淆或外部化您的交付配置。

在环境变量文件(.env)中

PORT=2344

在 Yarn 文件 (package.json) 中。
source .env; yarn ./start.sh --port $PORT

在Yarn脚本(start.sh)中。
#!/bin/bash 
while [ $? != 0 ]; do
    node dist/src/index.js $1;  #replace with your app call#
done

应用程序随后接受端口作为变量。非常适用于多租户部署。

0

您可以使用流行的dotenv包:

在根目录中创建一个名为.env的文件 将所有环境变量放入其中

e.g.:

ENV=DEVELOPMENT

用以下方式运行你的代码

$ node -r dotenv/config your_script.js

这里是解释:

[https://github.com/motdotla/dotenv#preload]


如何使用脚本而不是文件来执行此操作?例如 node -r dotenv/config npm start 或类似的命令。 - Nermin
在你的文件顶部导入 dotenv/config - undefined

0
在Windows命令提示符中定义环境变量,我们可以使用set命令,然后将调用拆分为两行。
set PORT=2344
yarn start:dev

set 命令在当前命令提示符中持久存在,因此您只需要运行一次。

在 bash 中的等效命令是“export”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接