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

问题描述:

我正在构建一个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 .." 
    } 

定义如下NPM脚本在我的构建.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 
     } 

下buildTypes。然后在的package.json我创造了这个节点脚本

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

现在,我终于可以创建使用分段生产版本。