使用 Webpack 发布网站

编辑页面

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


For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.

警告 已弃用:在 SDK 50 及更高版本中,使用 webpack 发布已被弃用,建议改用 metro。了解更多,请参阅 从 Webpack 迁移到 Expo Router

使用 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 上访问。

当你将代码发布到你的仓库时,例如:gh-pages,它会将代码创建并推送到你仓库中的一个分支。这个分支会包含你的构建代码,但不包含你的开发源代码。

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