如何让npm脚本构建正确的环境?

时间:2017-09-26 15:28:01

标签: android node.js react-native react-native-android

我正在构建一个react-native项目,并使用react-native-config库在暂存和生产环境之间切换。我在单独的.env文件(.env.dev,.env.staging,.env.prod)中定义了我的环境,并且我在package.json中定义了以下npm脚本

"scripts": {
    "android-dev": "ENVFILE=.env.dev react-native run-android",
    "android-staging": "ENVFILE=.env.staging react-native run-android",
    "android-prod": "ENVFILE=.env.prod react-native run-android",
    "android-release": "react-native run-android --variant=release",
    "build-android-staging": "export ENVFILE=.env.staging && cd android && ./gradlew assembleRelease && cd ..",
    "build-android-prod": "export ENVFILE=.env.prod && cd android && ./gradlew assembleRelease && cd .."
  }

在我的build.gradle中,我放置了以下内容

project.ext.envConfigFiles = [
  debug: ".env.staging",
  release: ".env.prod",
  anycustombuildlowercase: ".env.staging",
]

我认为脚本和build.gradle代码之间存在冲突,因为当我运行npm run build-android-staging时,它会在生产环境中构建版本。如果我删除build.gradle中的代码并调用api,则会收到Fatal Exception: java.lang.IllegalArgumentException unexpected url: undefinedapi/错误。我需要更改什么才能使我的构建脚本能够在正确的环境中工作?

1 个答案:

答案 0 :(得分:0)

经过长时间的研究,我终于遇到了这个问题this issue,其中有人详细说明了如何做到这一点。在build.gradle中,我不得不添加

project.ext.envConfigFiles = [
  debug: ".env.staging",
  release: ".env.prod",
  releaseStaging: ".env.staging", <---- THIS LINE
  anycustombuildlowercase: ".env.staging",
]

在同一个build.gradle文件中,添加

releaseStaging {
          minifyEnabled enableProguardInReleaseBuilds
          useProguard enableProguardInReleaseBuilds
        }

在buildTypes下。然后在package.json中创建了这个节点脚本

"android-release-staging": "react-native run-android --variant=releaseStaging".

现在我终于可以使用暂存来创建生产构建。