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

标签 android node.js react-native

我正在构建一个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/错误。我需要改变什么才能让我的构建脚本在正确的环境中工作?

最佳答案

经过长时间的研究,我终于遇到了这个问题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
        }

在构建类型下。然后在 package.json 中我创建了这个 Node 脚本

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

现在我终于可以使用暂存创建生产版本了。

关于android - 如何让npm脚本构建正确的环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46430453/

相关文章:

javascript - session 如何在 Express.js 和 Node.js 中工作?

javascript - 在 Javascript 中从 React Native 调用 Native Java 方法

android - 如何偏移 RefreshControl

node.js - 无法在strongloop 中启动cronjob

javascript - 这是检查 javascript 中未定义值的好方法吗?

android - 如果我在端口 9999 上运行react-native packager,我如何告诉IOS模拟器这是要监听的端口?

android - 用于视频输出(HDMI 等)的标准 Android API

android - 为屏幕方向保存我的 ListView 的状态

javascript - React Native Component 不工作检查 App 的渲染方法

java - Arduino - Android 蓝牙连接有时会出现第一个字符错误