React Native 将Expo Classic的发布渠道转换为EAS

6qftjkof  于 2023-04-07  发布在  React
关注(0)|答案(1)|浏览(117)

我已经将我们的旧移动的应用程序转换为最新版本的expo。看到许多东西已经被弃用,包括expo publish,我现在正在将eas build集成到我的工作流程中
在我之前的代码中,我一直在使用Updates.releaseChannel作为我的env特定配置。请参见下面的代码:

export function getEnvConst() {
  if (Updates.releaseChannel.startsWith("prod")) {
    return { apiUrl: "https://prodUrl.com/" };
  } else if (Updates.releaseChannel.startsWith("staging")) {
    return { apiUrl: "https://stagingUrl.com/" };
  } else if (Updates.releaseChannel.startsWith("uat")) {
    return { apiUrl: "https://uatUrl.com/" };
  } else {
    return { apiUrl: "https://devUrl.com/" };
  }
}

我可以通过以下命令选择通道:

expo publish --release-channel prod
expo publish --release-channel uat
expo publish --release-channel staging

这个设置允许我基于releaseChannel切换ApiUrl,同时,在开发期间(npm start),else语句启动以使用dev url运行(因为没有发布通道)
我似乎无法使用eas build复制此设置。我尝试的是添加eas.json并添加一堆profile和一堆env。这些env似乎也无法访问javascript代码?
我尝试的是:
1.添加配置文件并使用channel。字面上使用了上面相同的getEnvConst函数,并将releaseChannel替换为channelchannel似乎不工作。我使用以下命令发布eas build -p android --profile stagingeas.json包含以下内容:

{
  "cli": {
    "version": ">= 3.8.1"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "ios": {
        "resourceClass": "m-medium"
      },
      "channel": "dev",
    },
    "staging": {
      "android": {
        "buildType": "apk"
      },
      "ios": {
        "resourceClass": "m-medium"
      },
      "channel": "staging",
    },
    "uat": {
      "distribution": "internal",
      "ios": {
        "resourceClass": "m-medium"
      },
      "channel": "uat",
    },
    "production": {
      "ios": {
        "resourceClass": "m-medium"
      },
      "channel": "production",
    }
  },
  "submit": {
    "production": {}
  },
}

1.尝试在eas.json中添加env。但是这个export const apiUrl = process.env.API_URL似乎无法通过npm start获取值。还没有在eas build中测试它,因为测试需要很多时间。

{
  "cli": {
    "version": ">= 3.8.1"
  },
  //Remove other sections for brevity
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "ios": {
        "resourceClass": "m-medium"
      },
      "channel": "dev",
      "env": {
        "API_URL": "http://devUrl.com/"
      }
    },
    "production": {
      "ios": {
        "resourceClass": "m-medium"
      },
      "channel": "production",
      "env": {
        "API_URL": "https://prodUrl.com/"
      }
    }
  },
  "submit": {
    "production": {}
  },
  "development": {
    "client": "local"
  },
  "env": {
    "development": {
      "API_URL": "https://devUrl.com/"
    }
  }
}

老实说,我对这一切都很困惑,即使在阅读了文档之后,我也不想承认这花费了我很多时间。似乎我错过了文档假定我知道的expo的基本原理,所以它所说的与我无关。

dbf7pr2w

dbf7pr2w1#

我能够继续我想发生的事情。
这个SO答案解决了我的问题。它说我需要先添加一个branch,然后使用以下命令将我的channel链接到它:

eas update --branch staging
eas channel:edit staging --branch staging

之前让我感到困惑的是,每当我运行eas build -p android --profile staging时,它都不会显示任何警告或错误,只是成功完成。这让我错误地认为我的配置文件的channel应该生效。在创建branch并将我的通道链接到它之后,Updates.channel现在包含eas.json中的通道。

然而,每当我运行eas update --channel staging --platform android时,Updates.channel仍然为null。我只是在执行eas update时注解/取消注解了else的返回,目前可以使用。

似乎没有直接替代expo publishreleaseChannel之前使用的方式。
我的eas.json仍然与以前类似:

{
  "cli": {
    "version": ">= 3.8.1"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "ios": {
        "resourceClass": "m-medium"
      },
      "channel": "dev"
    },
    "staging": {
      "distribution": "internal",
      "ios": {
        "resourceClass": "m-medium"
      },
      "channel": "staging"
    },
    "uat": {
      "distribution": "internal",
      "ios": {
        "resourceClass": "m-medium"
      },
      "channel": "uat"
    },
    "production": {
      "ios": {
        "resourceClass": "m-medium"
      },
      "channel": "production"
    }
  },
  "submit": {
    "production": {}
  }
}

相关问题