Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何告诉react native要查看的.env文件?_Javascript_Android_React Native_Environment Variables_Environment - Fatal编程技术网

Javascript 如何告诉react native要查看的.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

在windows上,我正在开发一个白标签应用程序,并尝试使用env变量生成特定于代码的构建。我使用的是
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//这将是应用程序在模拟器中内置时的名称