Han*_*ans 34 shell environment-variables node.js npm
我有一个package.json,脚本键中包含以下(简化)内容:
...
scripts: {
"start": "NODE_ENV=${NODE_ENV:=production} node start-app.js",
"poststart": "echo $NODE_ENV"
}
...
Run Code Online (Sandbox Code Playgroud)
从命令行我可以运行:
npm start
Run Code Online (Sandbox Code Playgroud)
这将运行我的start-app.js脚本并将process.env.NODE_ENV环境变量设置为"production".请参阅此处获取语法说明.
如上所述启动后会自动开始运行后这里.
但是,poststart不会"继承"NODE_ENV shell环境变量,因此echo命令不会回显任何内容.
我的生产代码有点复杂,但我想要完成的是将NODE_ENV变量从"起点"传递给依赖脚本.关于如何做的任何建议/最佳实践?
我不想在poststart中硬编码NODE_ENV,因为我可能想要:
NODE_ENV=development npm start
Run Code Online (Sandbox Code Playgroud)
我希望每一个"沿着链条"继承同样的环境.
Mar*_*cke 16
你有几个选择:
env单独为每个命令定义一个poststart您可以为npm连接命令而不是脚本,如下所示:"start": "NODE_ENV=${NODE_ENV:=production} node start-app.js && echo $NODE_ENV"NODE_ENV.在我们公司,我们使用pm2在不同的环境中成功运行我们的所有应用程序(同时具有相同的启动命令)我就是这样做的,首先你需要安装两个开发依赖项
https://www.npmjs.com/package/env-cmd 这会从您的文件中加载您的 env var
https://www.npmjs.com/package/cross-env 这在脚本中使用环境变量
示例脚本:
"env-cmd ./.config/prod.env cross-env-shell \"docker volume create $DOCKER_VOLUME\""
Run Code Online (Sandbox Code Playgroud)
这从 prod.env 加载 $DOCKER_VOLUME env var
更新:从 env-cmd 版本 10 开始,如果要使用自定义 env 文件路径,则需要指定 -f 标志
"env-cmd -f ./.config/prod.env cross-env-shell \"docker volume create $DOCKER_VOLUME\""
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46209 次 |
| 最近记录: |