我正在使用Expo EAS将ponder的本机应用程序部署到 TestFlight 时,我发现了一些我认为人们应该知道的有趣的未记录的 EAS 功能标志。如果你有一个 monorepo,这些特别有用。

首先,我只想感谢Expo 团队让原生部署变得轻而易举。他们的源代码是开放的这一事实确实有助于资源受限的团队(如我的)解决我们自己的问题并完成工作,而无需等待他们的下一个版本。

使用eas build时,eas-cli首先创建项目源代码的神器,然后推送到云端进行远程构建。默认行为是使用 git 作为源代码生成最新的源代码工件。

但是,如果 monorepo 包含服务器端模块或任何与 expo 项目无关的代码,它也将包含在上传的工件中。这会导致额外的安全风险——即如果 expo 的工件存储受到损害,我们的内部业务逻辑将被暴露。

目前,默认的 git 工作流不提供在工件创建过程中忽略文件的方法(因为它只是在内部调用 git)。值得庆幸的是,从 Expo SDK 43 开始,一个新的标志EAS_NO_VCS=1被引入到选择退出使用 git 或任何 VCS以使用浅文件副本创建工件。使用此标志,EAS 然后从.easignore文件中读取,以确定不应将哪个文件复制到云构建工件中。.easignore文件的语法与.gitignore文件相同:

# add any modules in your monorepo that is unrelated to EAS
service-a/
server-b/
socket-c/

进入全屏模式 退出全屏模式

但是,有一个问题:monorepo。在 git 工作流中,expo 可以简单地依赖 git 来获取项目结构。通过简单的工作流程,expo 现在只能看到它正在运行的当前目录。幸运的是,expo 团队已经为此实施了一个解决方案,尽管没有记录。

我在阅读eas-cli源代码时找到了这个解决方案,寻找修补它的方法。显然,eas-cli还在环境中读取了另一个名为EAS_PROJECT_ROOT:source的标志。 EAS 浅拷贝方法使用此变量来创建完整的项目工件。

要使用这个标志,首先我将我的.easignore文件移动到我的 monorepo 的根目录。然后,我像这样运行 EAS:

跨环境 EAS_NO_VCSu003d1 EAS_PROJECT_ROOTu003d.. EAS 构建

瞧 - 一切正常。现在,我们的部署不是上传一个 160MB 的工件,而是上传一个 2.6MB 的前端特定代码工件!

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐