从package.json运行`source`以设置脚本运行的环境变量

时间:2019-03-06 11:30:00

标签: linux macos environment-variables package.json fastlane

我的package.json中有一些script-条目。

要通过Fastlane将应用程序部署到应用程序商店,我需要为APPLE_ID或google-services的JSON文件设置环境变量。

此设置是针对每个用户(可能是针对每个项目)的。

我知道,如何通过package.json添加硬编码的ENV变量:

"ANDROID_closedBeta": "FASTLANE_JSON_KEY_FILE=`find $(pwd) -name release_manager.json` bundle exec fastlane android deploy_closedBeta",

但是那并不能解决我的问题。我创建了一个文件: ios_env linux_env ,该文件会导出一些敏感的凭据。

如果我运行source linux_env,将设置变量,并且可以通过CLI命令运行fastlane android deploy_closedBeta

而没有任何问题地运行快速通道

但是,如果我尝试通过yarn或npm运行它,则找不到该ENV。 因此,我尝试在falstlane-command之前运行source,但是也没有用:

"ANDROID_closedBeta": "`source ./linux_env` FASTLANE_JSON_KEY_FILE=`find $(pwd) -name release_manager.json` bundle exec fastlane android deploy_closedBeta",

我如何获取package.json-script来识别我的环境变量,而无需将其硬编码到package.json中?

1 个答案:

答案 0 :(得分:0)

我发现了一个丑陋的解决方法...但是如果有人可以向我展示一种更好的方法来实现这一点,我将感到很高兴:

在package.json中,我声明了两个设置。一个具有需要仍然接收到的ENV变量的主脚本的脚本,以及一个首先加载环境然后在此环境中运行main脚本任务的脚本条目。

很难解释,容易展示...看一下:

"scripts": {
...
   "IOS_internalTest": "source ./fastlane/ios_env && IOS_DEPLOY_TYPE=deploy_internalTest npm run IOS_runDeployment",
   "IOS_betaTest": "source ./fastlane/ios_env && IOS_DEPLOY_TYPE=deploy_betaTest npm run IOS_runDeployment",
   "IOS_runDeployment": "bundle exec fastlane ios $IOS_DEPLOY_TYPE",
...
} 

第一个条目source是我的文件,我的所有ENV导出都在该文件中(例如export BIMBOM=FooBar) 完成后,它将执行npm run IOS_doInternalTest。因为它是在相同的shell上下文中运行的,所以我之前source的ENV变量仍​​然可用。

如果单线解决方案对您表示敬意