我有一个代码,可以从环境变量或配置中读取端口号。代码如下所示
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 命令行中失败。我尝试了以下方法,但无法使其工作。
尝试: 端口=2344 纱线开始:开发
我收到错误:"PORT"未被识别为内部或外部命令, 可操作的程序或批处理文件。
尝试: 纱线端口=2344 开始:开发
我收到错误:纱线运行v1.17.3 错误命令"PORT=2344"未找到。 info 有关此命令的文档,请访问 https://yarnpkg.com/en/docs/cli/run。
请问有什么想法吗?我知道,我可以从Windows中的系统属性定义环境变量。但是,如果我可以从命令行执行此操作,有什么方法吗?
我建议你使用名为Cross-ENV的NPM模块。 它允许在命令行上添加特定的 env 变量,而不管平台如何。 话虽如此,您可以尝试:
$ cross-env PORT=2344 yarn start:dev
您可以在 Windows 命令提示符下将命令与&
(或&&
(链接。要设置环境变量,您需要使用set
命令。
结果应如下所示:set PORT=1234 && yarn start:dev
。
在 Windows 命令提示符下找到了此问题的解决方案。
-
在项目根文件夹(src 文件夹外部(中创建 .env 文件。
-
在其中定义端口。就我而言,.env 文件的内容将是,
PORT=2344
-
运行纱线开始:dev
-
应用程序将使用您在 .env 文件中指定的端口号。
把.env
文件放在根目录。然后以下命令将公开.env
文件的内容,然后运行yarn start command
$ source .env && yarn start
或此命令
$ export $(cat .env) && yarn start
如果更新 .env 中的任何变量,则关闭终端并打开新的终端窗口,并可以再次运行上述命令。或者也可以运行 unset 命令来删除现有的 var。
unset VAR_NAME
您可以使用流行的软件包dotenv:
在根目录中创建文件 .env 把你所有的环境变量
例如:
ENV=DEVELOPMENT
像这样运行代码
$ node -r dotenv/config your_script.js
这里的解释:
[https://github.com/motdotla/dotenv#preload]
要在 Windows 命令提示符下定义环境变量,我们可以使用 set 命令,然后将调用拆分为两行。
set PORT=2344
yarn start:dev
set 命令保留在当前命令提示符下,因此只需运行一次。
bash 中的等效命令是"导出"。
仅供参考(不是直接答案(。 我在VS Code中尝试这样做 - 通过yarn将.env变量传递给JavaScript应用程序。 谷歌的例子很少,所以我为后代分享这个,因为它有点相关。
下面只是替换通常直接放置在 package.json 或脚本文件中的文本。 使用它来快速混淆或外部化您的交付配置。
在环境变量文件 (.env( 中
PORT=2344
在 Yarn File (package.json( 中
source .env; yarn ./start.sh --port $PORT
在纱线脚本中 (start.sh(
#!/bin/bash
while [ $? != 0 ]; do
node dist/src/index.js $1; #replace with your app call#
done
然后,应用接受端口作为变量。 非常适合多租户部署。