首页 > 解决方案 > 从 package.json 运行 `source` 以设置脚本运行的环境变量

问题描述

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

为了通过 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",

但这并不能解决我的问题。我创建了一个 File: ios_envlinux_env,它导出了一些敏感的凭据。

如果我运行source linux_env,则设置了变量,我可以通过 CLI-Command 运行 fastlane,而不会出现任何问题: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 中?

标签: linuxmacosenvironment-variablespackage.jsonfastlane

解决方案


我找到了一个丑陋的解决方法......但如果有人能告诉我一个更好的方法来:

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

很难解释,很容易展示......看看这个:

"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 变量仍然可用。

向你致敬,如果你有一个单行的解决方案


推荐阅读