发布网站
编辑
学习如何将 Expo 网站部署为生产环境。
Expo 网络应用可以在本地进行测试以验证生产行为,并部署到托管服务。我们建议将其部署到 EAS Hosting 以获得最佳功能支持。您还可以选择自托管或使用第三方服务。
EAS Hosting 是部署您的网络应用的最佳方式,支持自定义域名、SSL 等更多功能。
对于 SDK 49 及更早版本,您可能需要查看 发布
webpack构建的指南。
输出目标
web.output 目标可以在 应用配置 中进行配置,以设置网络应用的导出方法:
{ "expo": { "web": { "output": "server", "bundler": "metro" } } }
Expo Router 支持网络应用的三种输出目标。
| 输出 | Expo Router | API 路由 | 描述 |
|---|---|---|---|
single (默认) | 输出单页应用(SPA),在输出目录中只有一个 index.html,没有静态可索引的 HTML。 | ||
server | 创建 client 和 server 目录。客户端文件作为单独的 HTML 文件输出。API 路由作为单独的 JavaScript 文件,用于自定义 Node.js 服务器的托管。 | ||
static | 为 app 目录中的每个路由输出单独的 HTML 文件。 |
创建构建
创建项目的构建是发布网络应用的第一步。无论您想在本地提供服务还是部署到托管服务,您都需要导出项目的所有 JavaScript 和资产。这被称为静态打包。可以通过运行以下命令导出:
运行通用导出命令以编译项目以适应网络:
- npx expo export -p web生成的项目文件位于 dist 目录中。任何在 public 目录中的文件也会复制到 dist 目录中。
本地服务
使用 npx expo serve 快速测试您的网站在生产中将如何托管。运行以下命令以提供静态打包服务:
- npx expo serve打开 http://localhost:8081 查看您的项目运行情况。此为 仅 HTTP,因此权限、相机、位置和许多其他安全功能可能无法按预期工作。
使用 EAS 托管
当您准备好投入生产时,可以使用 EAS CLI 立即部署您的网站。
EAS Hosting 是部署您的网络应用的最佳方式,支持自定义域名、SSL 等更多功能。
在第三方服务上托管
Netlify
Netlify 是一个几乎不干预的平台,用于部署网络应用。它对 Expo 网络应用的兼容性最高,因为它对框架几乎没有假设。
使用 Netlify CDN 手动部署
1
通过运行以下命令安装 Netlify CLI:
- npm install -g netlify-cli2
为单页应用配置重定向。
如果您的应用使用 静态渲染,则可以跳过此步骤。
expo.web.output: 'single' 生成单页应用。这意味着只有一个 dist/index.html 文件需要重定向所有请求。这可以在 Netlify 中通过创建一个 ./public/_redirects 文件并将所有请求重定向到 /index.html 来完成。
/* /index.html 200
如果您修改了此文件,则必须通过 npx expo export -p web 重新构建项目,以确保它被安全复制到 dist 目录中。
3
通过运行以下命令部署网络构建目录:
- netlify deploy --dir dist您将看到一个可用于在线查看项目的 URL。
持续交付
Netlify 还可以在您推送到 Git 或打开新的拉取请求时进行构建和部署:
- 开始一个新的 Netlify 项目。
- 选择您的 Git 托管服务并选择您的存储库。
- 点击 Build your site。
Vercel
Vercel 具有单命令部署流程。
1
安装 Vercel CLI。
- npm install -g vercel@latest2
3
部署网站。
- vercel现在您将看到一个可用于在线查看项目的 URL。当构建完成后,将该 URL 粘贴到浏览器中,您将看到已部署的应用。
AWS Amplify 控制台
AWS Amplify 控制台 提供了基于 Git 的工作流,用于持续部署和托管全栈无服务器网络应用。Amplify 从存储库而不是从您的计算机部署您的 PWA。在本指南中,我们将使用 GitHub 存储库。在开始之前,在 GitHub 上创建一个新仓库。
1
将 amplify-explicit.yml 文件添加到您存储库的根目录。确保您已从 .gitignore 文件中删除生成的 dist 目录并提交了这些更改。
2
将您的本地 Expo 项目推送到 GitHub 存储库。如果您尚未推送到 GitHub,请遵循 GitHub 的指南将现有项目添加到 GitHub。
3
登录到 Amplify 控制台,选择一个现有的应用或创建一个新应用。授予 Amplify 读取您 GitHub 账户或拥有您存储库的组织的权限。
4
添加您的存储库,选择分支,并在 Connecting a monorepo? 中输入您的应用 dist 目录的路径,然后选择 Next。
Amplify 控制台将检测到您项目中的 amplify.yml 文件。选择 Allow AWS Amplify to automatically deploy all files hosted in your project root directory 并选择 Next。
5
检查您的设置并选择 Save and deploy。您的应用现在将部署到 https://branchname.xxxxxx.amplifyapp.com URL。您现在可以访问您的网络应用,部署另一个分支,或在您的 Expo 移动和网络应用之间添加统一的后端环境。
按照 Learn how to get the most out of Amplify Hosting 下拉列表中的步骤 Add a custom domain with a free SSL certificate 及更多信息。
Firebase 托管
Firebase Hosting 是用于网络项目的生产级内容托管。
1
通过 Firebase 控制台 创建一个 Firebase 项目,并按照这些 说明 安装 Firebase CLI。
2
使用 CLI 登录到您的 Firebase 账户,运行命令:
- firebase login3
然后,通过运行命令初始化您的 Firebase 项目以进行托管:
- firebase init设置将取决于您如何构建 Expo 网站:
- 当询问公共路径时,请确保指定 dist 目录。
- 当提示 Configure as a single-page app (rewrite all urls to /index.html) 时,仅当您使用
web.output: "single"(默认)时才选择 Yes。否则,选择 No。
4
在 package.json 的现有 scripts 属性中,添加 predeploy 和 deploy 属性。每个属性具有以下值:
"scripts": { %%placeholder-start%%... %%placeholder-end%% "predeploy": "expo export -p web", "deploy-hosting": "npm run predeploy && firebase deploy --only hosting", }
5
要部署,请运行以下命令:
- npm run deploy-hosting打开控制台输出中的 URL 检查您的部署,例如:https://project-name.firebaseapp.com。
如果您想更改托管的标题,请在 firebase.json 的 hosting 部分添加以下配置:
"hosting": [ { %%placeholder-start%%... %%placeholder-end%% "headers": [ { "source": "/**", "headers": [ { "key": "Cache-Control", "value": "no-cache, no-store, must-revalidate" } ] }, { "source": "**/*.@(jpg|jpeg|gif|png|svg|webp|js|css|eot|otf|ttf|ttc|woff|woff2|font.css)", "headers": [ { "key": "Cache-Control", "value": "max-age=604800" } ] } ], } ]
GitHub Pages
GitHub Pages 允许您直接从 GitHub 存储库发布网站。
GitHub Pages 部署使用实验性baseUrl功能,可能无法按预期工作。
1
首先在您的项目中初始化一个新的 git 存储库,并将其配置为推送到 GitHub 存储库。如果您已经在与 GitHub 存储库同步您的更改,请跳过此步骤。
在 GitHub 网站上创建一个存储库。然后,在项目的根目录中运行以下命令:
- git init- git remote add origin https://github.com/username/expo-gh-pages.git上述命令初始化了一个新的 Git 存储库,并将其配置为将您的源代码推送到指定的 GitHub 存储库。
2
将在项目中安装 gh-pages 包作为开发依赖:
- npm install --save-dev gh-pages- yarn add -D gh-pages3
要部署该项目,请在 应用配置 中将其配置为子域,在 baseUrl 属性中设置其值为字符串 /repo-name。
例如,如果 GitHub 存储库是 expo-gh-pages,则 实验性 baseUrl 属性 的值将如下:
{ "expo": { "experiments": { "baseUrl": "/expo-gh-pages" } } }
4
通过在 package.json 文件中修改 scripts,添加 predeploy 和 deploy 脚本。每个脚本都有自己的值:
"scripts": { %%placeholder-start%%... %%placeholder-end%% "deploy": "gh-pages --nojekyll -d dist", "predeploy": "expo export -p web" }
因为 Expo 在生成的文件中使用下划线,所以您需要使用 --nojekyll 标志禁用 Jekyll。
5
要生成网络应用的生产构建并将其部署到 GitHub Pages,运行以下命令:
- npm run deploy- yarn deploy这将在您 GitHub 存储库的 gh-pages 分支上发布网络应用的构建。此分支只包含来自 dist 目录的构建构件,以及 gh-pages 生成的 .nojekyll 文件。它不包括开发源代码。
6
现在网络应用已发布到 gh-pages 分支,配置 GitHub Pages 从该分支提供应用。
- 导航到 GitHub 存储库的 Settings 选项卡。
- 向下滚动到 Pages 部分。
- 确保 Source 设置为 Deploy from a branch。
- 在 Branch 部分,选择 gh-pages 和 root 目录。
- 点击 Save。
7
一旦网络应用发布并设置了 GitHub Pages 配置,GitHub Action 将部署您的网站。您可以通过导航到存储库的 Actions 选项卡来监控其进度。完成后,您的网络应用将可在 URL http://username-on-github.github.io/repo-name 上访问。
对于后续的部署和更新,运行 deploy 命令,GitHub Action 将自动开始更新您的网络应用。