无法正确配置expo应用程序“无法读取配置:/app.config.js”

dan*_*789 5 android build ios react-native expo

我正在尝试开发一个应用程序,但在添加 dotenv 后无法构建它。

在我的app.config.js我有

import "dotenv/config";
const API_URL = process.env["API_URL"] || "";
const API_VERSION = process.env["API_VERSION"] || "";
const MIRAGE_ENABLED = process.env["MIRAGE_ENABLED"] === "true" ? true : false;
const NODE_ENV = process.env["NODE_ENV"];

export default {
  name: "My Application",
  version: "0.0.0",
  extra: {
    API_URL,
    API_VERSION,
    MIRAGE_ENABLED,
    NODE_ENV,
  },
};
Run Code Online (Sandbox Code Playgroud)

在我的app.json我有:

{
  "expo": {
    "name": "my-application",
    "slug": "my-application",
    "owner": "my-expo",
    "privacy": "unlisted",
    "version": "0.0.0",
    "orientation": "landscape",
    "icon": "./assets/images/icon.png",
    "sdkVersion": "37.0.0",
    "platforms": ["ios"],
    "splash": {
      "image": "./assets/images/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "updates": {
      "fallbackToCacheTimeout": 0
    },
    "assetBundlePatterns": ["**/*"],
    "ios": {
      "supportsTablet": true,
      "bundleIdentifier": "io.company.my-application",
      "buildNumber": "0.0.0"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

读完文档后我比以前更困惑了。的输出expo build是:

Failed to read config at: .../app.config.js
ConfigError: Failed to read config at: .../app.config.js
    at Object.getDynamicConfig (/Users/me/.npm-global/lib/node_modules/expo-cli/node_modules/@expo/config/src/getConfig.ts:37:9)
    at getConfig (/Users/me/.npm-global/lib/node_modules/expo-cli/node_modules/@expo/config/src/Config.ts:121:62)
    at validateAsync (/@expo/xdl@58.0.12/src/project/Doctor.ts:438:24)
    at Object.validateWithoutNetworkAsync (/@expo/xdl@58.0.12/src/project/Doctor.ts:419:10)
    at /Users/me/.npm-global/lib/node_modules/expo-cli/src/exp.ts:644:35
    at Command.<anonymous> (/Users/me/.npm-global/lib/node_modules/expo-cli/src/exp.ts:331:7
Run Code Online (Sandbox Code Playgroud)

这根本没有帮助。搜索Failed to read config at: .../app.config.js没有任何结果。

我究竟做错了什么?以这种方式使用 expo 进行配置的最佳实践是什么?任何帮助将不胜感激。

Erk*_*urt 8

首先,您需要使用 app.config.js 中的环境变量覆盖 app.json。要覆盖 js 对象,您可以使用分隔符运算符,并且要提供“额外”变量,您可以使用额外的键。让我举个例子吧:

import 'dotenv/config'

export default ({config}) => {
  const appConfig = ({
    ...config,
    version: process.env.VERSION,
    //override anything you want
    extra: {
      API_URL: process.env.API_URL,
      //...
    }
  });
  return appConfig;
}
Run Code Online (Sandbox Code Playgroud)

这会将进程环境变量附加到您的清单中。如果您遇到有关 app.config.js 的任何读取错误,则可能是您没有安装 dotenv 包。让我知道。