This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.

使用 Webpack 发布网站

编辑页面

使用 webpack 借助第三方服务发布 Expo Web 应用的不同方式。


使用 Expo 创建的 Web 应用可以在本地提供服务,以测试生产环境行为。一旦测试阶段通过,你可以选择各种第三方服务来托管它。

BundlerExpo RouterAPI Routes描述
webpack输出一个单页应用(SPA),输出目录中只有一个 index.html 文件。

创建 Web 构建

为项目创建 Web 构建是发布 Web 应用的第一步。无论你是想在本地提供服务,还是想托管到第三方服务,你都必须导出项目的所有 JavaScript 和资源文件。这被称为静态包。你可以通过运行以下命令来导出:

运行 webpack 导出命令,将项目编译为 Web:

Terminal
npx expo export:web

生成的项目文件位于 web-build 目录中。web 目录中的任何文件也会被复制到 web-build 目录中。

如果你对项目进行了更改,请重新构建以用于生产环境。不要直接编辑 web-build 目录。

在本地提供服务

使用 Serve CLI 可以快速在本地测试你的网站在生产环境中的托管方式。运行以下命令来提供静态包服务:

运行以下命令来为单页应用提供服务:

Terminal
npx serve web-build --single

打开 http://localhost:5000 查看你的项目运行情况。此方法仅支持 HTTP,因此权限、摄像头、位置以及许多其他功能都无法使用。

在子目录中提供服务

如果你想在子目录中托管你的网站,请将其路径添加到你的 package.json 中,如下所示:

package.json
{ "homepage": "/path/to/sub-directory" }

在第三方服务上托管

Netlify

Netlify 是一个大多不做强假设的 Web 应用部署平台。由于它对框架几乎不作假设,因此与 Expo Web 应用具有最高的兼容性。

使用 Netlify CDN 手动部署

1

通过运行以下命令安装 Netlify CLI:

Terminal
npm install -g netlify-cli

2

为单页应用配置重定向。

如果你的应用实现了任何导航,你需要配置 Netlify 将请求重定向到单个 web-build/index.html 文件。这可以通过在 Netlify 中创建 ./public/_redirects 文件,并将所有请求重定向到 /index.html 来完成。

进入 web-build 目录并运行以下命令,以使用以下规则创建 _redirects 文件:

web/_redirects
/* /index.html 200

如果你修改了此文件,必须使用 npx expo export:web 重新构建项目,才能安全地将其复制到 web-build 目录中。

3

运行以下命令部署 Web 构建目录:

Terminal
netlify deploy --dir web-build

你会看到一个可用于在线查看项目的 URL。

持续交付

当你推送到 git 或打开新的拉取请求时,Netlify 也可以自动构建并部署:

Vercel

Vercel 提供单命令部署流程。

1

安装 Vercel CLI

Terminal
npm install -g vercel@latest

2

为单页应用配置重定向。在应用根目录创建一个 vercel.json 文件,并添加以下内容:

vercel.json
{ "buildCommand": "expo export:web", "outputDirectory": "web-build", "devCommand": "expo", "cleanUrls": true, "framework": null, "rewrites": [ { "source": "/:path*", "destination": "/" } ] }

3

部署网站。

Terminal
vercel

现在你会看到一个可用于在线查看项目的 URL。构建完成后,将该 URL 粘贴到浏览器中,即可查看你已部署的应用。

AWS Amplify Console

AWS Amplify Console 提供基于 Git 的工作流,用于持续部署和托管全栈无服务器 Web 应用。Amplify 是从仓库而不是你的电脑中部署你的 PWA,因此你必须使用 GitHub 仓库。开始之前,请先在 GitHub 上创建一个新仓库

1

amplify-explicit.yml 文件添加到仓库根目录。确保你已从 .gitignore 文件中移除生成的 dist 目录,并提交这些更改。

2

将本地 Expo 项目推送到 GitHub 仓库。如果你还没有推送到 GitHub,请按照 GitHub 关于将现有项目添加到 GitHub 的指南

3

登录 Amplify Console,并选择一个现有应用或创建一个新应用。授予 Amplify 权限,以便从你的 GitHub 账户或拥有你仓库的组织中读取内容。

4

添加你的仓库,选择分支,然后选择 Connecting a monorepo?,输入你的应用 dist 目录的路径,并选择 Next

Amplify Console 将检测到你项目中的 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。你现在可以访问你的 Web 应用、部署另一个分支,或在你的 Expo 移动端和 Web 应用之间添加统一的后端环境。

按照 Learn how to get the most out of Amplify Hosting 下拉菜单中的步骤,Add a custom domain with a free SSL certificate,以及获取更多信息。

GitHub Pages

GitHub Pages 允许你直接从 GitHub 仓库发布网站。

1

首先在你的项目中初始化一个新的 git 仓库。如果这一步已经完成,请跳过。

如果没有,你需要在项目根目录中运行以下命令:

Terminal
git init

2

将 GitHub 仓库作为 remote 添加到你的本地 git 仓库中。

Terminal
git remote add origin https://github.com/username/expo-gh-pages.git

运行上述命令后,git 就知道你要将源代码推送到哪个仓库。它也会让 gh-pages 包(在下一步安装)知道你要将应用部署到哪里。

3

在你的项目中将 gh-pages 包作为 dev-dependency 安装:

Terminal
yarn add -D gh-pages

4

为 Web 托管配置项目的 package.json。首先添加一个 homepage 属性。将其值设为字符串 http://{username on GitHub}.github.io/{repo-name}

例如,如果 GitHub 用户名为 dev,GitHub 仓库为 expo-gh-pages,则 homepage 属性的值如下:

package.json
{ "homepage": "http://dev.github.io/expo-gh-pages" }

在同一个文件中,通过添加 predeploydeploy 属性来修改 scripts 属性。每个属性的值如下所示:

package.json
"scripts": { %%placeholder-start%%... %%placeholder-end%% "deploy": "gh-pages -d web-build", "predeploy": "expo export:web" }

5

要生成应用的生产构建并将其部署到 GitHub Pages,请运行以下命令:

Terminal
yarn deploy

你的 Web 应用现在可在你在 package.json 中设置为 homepage 的 URL 上访问。

Firebase hosting

Firebase Hosting 是面向 Web 项目的生产级 Web 内容托管服务。

1

使用 Firebase Console 创建一个 firebase 项目,并按照这些 说明安装 Firebase CLI。

2

使用 CLI,通过运行以下命令登录你的 Firebase 账户:

Terminal
firebase login

3

然后,通过运行以下命令初始化你的 firebase 项目以进行托管:

Terminal
firebase init

设置将取决于你如何构建 Expo 网站:

当询问 public path 时,务必指定 web-build 目录。另外,在提示 Configure as a single-page app (rewrite all urls to /index.html) 时,选择 Yes

4

package.json 现有的 scripts 属性中,添加 predeploydeploy 属性。每个属性的值如下:

package.json
"scripts": { %%placeholder-start%%... %%placeholder-end%% "predeploy": "expo export:web", "deploy-hosting": "npm run predeploy && firebase deploy --only hosting", }

5

要部署,请运行以下命令:

Terminal
npm run deploy-hosting

打开控制台输出中的 URL 来检查你的部署,例如:https://project-name.firebaseapp.com

如果你想更改托管的 header,请在 firebase.jsonhosting 部分添加以下配置:

firebase.json
"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" } ] } ], } ]