Javascript 如何告诉react native要查看的.env文件?
在windows上,我正在开发一个白标签应用程序,并尝试使用env变量生成特定于代码的构建。我使用的是Javascript 如何告诉react native要查看的.env文件?,javascript,android,react-native,environment-variables,environment,Javascript,Android,React Native,Environment Variables,Environment,在windows上,我正在开发一个白标签应用程序,并尝试使用env变量生成特定于代码的构建。我使用的是react native config,我在GitHub上遵循了他们的设置,但出于某种原因SET ENVFILE=.env.myenvironment对我没有任何帮助,即使在build gradle中定义了映射,如下所示: project.ext.envConfigFiles = [ debug: ".env", release: ".env", anothercustombuild: ".en
react native config
,我在GitHub上遵循了他们的设置,但出于某种原因SET ENVFILE=.env.myenvironment
对我没有任何帮助,即使在build gradle
中定义了映射,如下所示:
project.ext.envConfigFiles = [
debug: ".env",
release: ".env",
anothercustombuild: ".env.custombuild",
]
有什么想法吗?我使用vscode集成终端传递
react native config
命令来告诉RN要查看哪个.env文件,但它根本不起作用
我开始使用powershell for windows并尝试使用正确的命令。它创造了奇迹。例如
$env:ENVFILE=“.env.mycustomenvironment”;反应本机运行android
。对于react native run ios
以及发布版本,它的工作原理应该是相同的
请记住,从现在起(2019年8月20日),
react native config
在RN 0.60+中将.env vars暴露到.JS文件时无法与产品风格正常工作,如果您正在寻找解决方法,请查看一下,但不要使用tl;dr将使用react-native-config
和react-native-build-config
我得到了react-native-config与flavors一起工作。(RN 0.60+)您不需要使用其他库。
下面是一个对我来说适用于白色标签的示例:
然后在配置中:
productFlavors {
client1 {
dimension "client"
resValue "string", "build_config_package", "PACKAGE_NAME_IN MANIFEST"
applicationId "com.app1"
}
client2 {
dimension "client"
resValue "string", "build_config_package", "PACKAGE_NAME_IN MANIFEST"
applicationId "com.app2"
}
dev {
...
dimension "environment"
}
stage {
minSdkVersion 21
resValue "string", "app_name", "Stage"
dimension "environment"
}
production {
minSdkVersion 21
resValue "string", "app_name", "Prod"
dimension "environment"
}
在gradle中配置flavors后,为了允许react native查看项目文件夹根目录中的自定义.env文件,必须将其添加到
android/app/build.gradle
project.ext.envConfigFiles = [
projecta: ".env.development.android.projecta",
projectb: ".env.development.android.projectb",
]
在我的示例中,我使用相同的代码库为android设备创建了两个应用程序,一个用于group1,一个用于group2
//将此添加到你的app/build.gradle
project.ext.envConfigFiles = [
projecta: ".env.development.android.projecta",
projectb: ".env.development.android.projectb",
]
//别忘了加上
android {
compileSdkVersion rootProject.ext.compileSdkVersion
flavorDimensions “default” // add this line
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
然后将此数组中的键与您的产品风格相匹配
productFlavors {
project1 {
minSdkVersion rootProject.ext.minSdkVersion
applicationId 'com.nativeapp.projecta'
targetSdkVersion rootProject.ext.targetSdkVersion
resValue "string", "build_config_package", "com.nativeapp"
}
project2 {
minSdkVersion rootProject.ext.minSdkVersion
applicationId 'com.nativeapp.projectb'
targetSdkVersion rootProject.ext.targetSdkVersion
resValue "string", "build_config_package", "com.nativeapp"
}
}
还要确保applicationId和resValue以应用程序包名称开头
在我的例子中,它是“nativeapp”,但您可以在MainActivity.java文件中找到您的
如果你深入研究android/app/main/java/com/directory,你会发现这一点
<resources>
<string name="app_name">Project1</string> //this will be the name of your app when its built in your emulator
</resources>
之后,您可以在需要时配置脚本,使其看起来像这样
"scripts": {
"android:project1": "ENVFILE=.env.development.projecta react-native run-android --variant=projectaDebug --appIdSuffix=projecta",
"android:project2": "ENVFILE=.env.development.projectb.android react-native run-android --variant=projectbDebug --appIdSuffix=projectb",}
注意:添加脚本时,变量必须是风格名称,例如“project2”,后跟“Debug”=“projectb”,因为这是默认的构建类型
还要确保你已经在android/app/src/中为每种口味创建了相关文件夹
就我而言
android/app/src/projecta/
android/app/src/projecta/
如果所有设置都正确,当您使用创建的脚本进行构建时,它应该创建正确的res文件夹和android清单文件
如果要更改每个应用程序实例的名称,请更改res/values
目录中的strings.xml
<resources>
<string name="app_name">Project1</string> //this will be the name of your app when its built in your emulator
</resources>
Project1//这将是应用程序在模拟器中内置时的名称