如何让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".
现在,我终于可以创建使用分段生产版本。