我有一个package.json,脚本密钥中包含以下(简化)内容:
...
scripts: {
"start": "NODE_ENV=${NODE_ENV:=production} node start-app.js",
"poststart": "echo $NODE_ENV"
}
...
从命令行我可以运行:
npm start
这将运行我的start-app.js脚本并将process.env.NODE_ENV环境变量设置为“production”。有关语法说明,请参阅here。
poststart将在开始后自动运行,如here所述。
但是,poststart不会“继承”NODE_ENV shell环境变量,因此echo命令不会回显任何内容。
我的生产代码有点复杂,但我想要完成的是将NODE_ENV变量从“起点”传递给依赖脚本。关于如何做的任何建议/最佳实践?
我不想在poststart中对NODE_ENV进行硬编码,因为我可能想这样做:
NODE_ENV=development npm start
我希望每一个“沿着链子”继承相同的环境。
答案 0 :(得分:15)
您有几个选择:
env
poststart
脚本,如下所示:"start": "NODE_ENV=${NODE_ENV:=production} node start-app.js && echo $NODE_ENV"
NODE_ENV
等设置定义特定于环境的json文件。在我们公司,我们使用pm2成功运行我们在不同环境中的所有应用程序(同时具有相同的启动命令)答案 1 :(得分:1)
这是我的方法,首先您需要安装两个开发依赖项
https://www.npmjs.com/package/env-cmd 这将从文件中加载环境变量
https://www.npmjs.com/package/cross-env 在脚本中使用此环境变量
示例脚本:
"env-cmd ./.config/prod.env cross-env-shell \"docker volume create $DOCKER_VOLUME\""
这将从prod.env加载$ DOCKER_VOLUME env var
答案 2 :(得分:-3)
如果您使用的是小型,请使用better-npm-run。对于小案例,它工作正常。不知何故,如果你有很多命令,它很难管理。试试,batman-cli。运作良好并处理许多与环境有关的问题
npm i -g batman-cli