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 应用的不同方式。
警告 已弃用:在 SDK 50 及更高版本中,使用
webpack发布已被弃用,建议改用metro。了解更多,请参阅 从 Webpack 迁移到 Expo Router。
使用 Expo 创建的 Web 应用可以在本地提供服务,以测试生产环境行为。一旦测试阶段通过,你可以选择各种第三方服务来托管它。
| Bundler | Expo Router | API Routes | 描述 |
|---|---|---|---|
webpack | 输出一个单页应用(SPA),输出目录中只有一个 index.html 文件。 |
创建 Web 构建
为项目创建 Web 构建是发布 Web 应用的第一步。无论你是想在本地提供服务,还是想托管到第三方服务,你都必须导出项目的所有 JavaScript 和资源文件。这被称为静态包。你可以通过运行以下命令来导出:
运行 webpack 导出命令,将项目编译为 Web:
- npx expo export:web生成的项目文件位于 web-build 目录中。web 目录中的任何文件也会被复制到 web-build 目录中。
如果你对项目进行了更改,请重新构建以用于生产环境。不要直接编辑 web-build 目录。
在本地提供服务
使用 Serve CLI 可以快速在本地测试你的网站在生产环境中的托管方式。运行以下命令来提供静态包服务:
运行以下命令来为单页应用提供服务:
- npx serve web-build --single打开 http://localhost:5000 查看你的项目运行情况。此方法仅支持 HTTP,因此权限、摄像头、位置以及许多其他功能都无法使用。
在子目录中提供服务
如果你想在子目录中托管你的网站,请将其路径添加到你的 package.json 中,如下所示:
{ "homepage": "/path/to/sub-directory" }
在第三方服务上托管
Netlify
Netlify 是一个大多不做强假设的 Web 应用部署平台。由于它对框架几乎不作假设,因此与 Expo Web 应用具有最高的兼容性。
使用 Netlify CDN 手动部署
1
通过运行以下命令安装 Netlify CLI:
- npm install -g netlify-cli2
为单页应用配置重定向。
如果你的应用实现了任何导航,你需要配置 Netlify 将请求重定向到单个 web-build/index.html 文件。这可以通过在 Netlify 中创建 ./public/_redirects 文件,并将所有请求重定向到 /index.html 来完成。
进入 web-build 目录并运行以下命令,以使用以下规则创建 _redirects 文件:
/* /index.html 200
如果你修改了此文件,必须使用 npx expo export:web 重新构建项目,才能安全地将其复制到 web-build 目录中。
3
运行以下命令部署 Web 构建目录:
- netlify deploy --dir web-build你会看到一个可用于在线查看项目的 URL。
持续交付
当你推送到 git 或打开新的拉取请求时,Netlify 也可以自动构建并部署:
- 开始一个新的 Netlify 项目。
- 选择你的 Git 托管服务并选择你的仓库。
- 点击 构建你的网站。
Vercel
Vercel 提供单命令部署流程。
1
安装 Vercel CLI。
- npm install -g vercel@latest2
为单页应用配置重定向。在应用根目录创建一个 vercel.json 文件,并添加以下内容:
{ "buildCommand": "expo export:web", "outputDirectory": "web-build", "devCommand": "expo", "cleanUrls": true, "framework": null, "rewrites": [ { "source": "/:path*", "destination": "/" } ] }
3
部署网站。
- 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 仓库。如果这一步已经完成,请跳过。
如果没有,你需要在项目根目录中运行以下命令:
- git init2
将 GitHub 仓库作为 remote 添加到你的本地 git 仓库中。
- git remote add origin https://github.com/username/expo-gh-pages.git运行上述命令后,git 就知道你要将源代码推送到哪个仓库。它也会让 gh-pages 包(在下一步安装)知道你要将应用部署到哪里。
3
在你的项目中将 gh-pages 包作为 dev-dependency 安装:
- yarn add -D gh-pages4
为 Web 托管配置项目的 package.json。首先添加一个 homepage 属性。将其值设为字符串 http://{username on GitHub}.github.io/{repo-name}。
例如,如果 GitHub 用户名为 dev,GitHub 仓库为 expo-gh-pages,则 homepage 属性的值如下:
{ "homepage": "http://dev.github.io/expo-gh-pages" }
在同一个文件中,通过添加 predeploy 和 deploy 属性来修改 scripts 属性。每个属性的值如下所示:
"scripts": { %%placeholder-start%%... %%placeholder-end%% "deploy": "gh-pages -d web-build", "predeploy": "expo export:web" }
5
要生成应用的生产构建并将其部署到 GitHub Pages,请运行以下命令:
- yarn deploy你的 Web 应用现在可在你在 package.json 中设置为 homepage 的 URL 上访问。
当你将代码发布到你的仓库时,例如:
gh-pages,它会将代码创建并推送到你仓库中的一个分支。这个分支会包含你的构建代码,但不包含你的开发源代码。
Firebase hosting
Firebase Hosting 是面向 Web 项目的生产级 Web 内容托管服务。
1
使用 Firebase Console 创建一个 firebase 项目,并按照这些 说明安装 Firebase CLI。
2
使用 CLI,通过运行以下命令登录你的 Firebase 账户:
- firebase login3
然后,通过运行以下命令初始化你的 firebase 项目以进行托管:
- firebase init设置将取决于你如何构建 Expo 网站:
当询问 public path 时,务必指定 web-build 目录。另外,在提示 Configure as a single-page app (rewrite all urls to /index.html) 时,选择 Yes。
4
在 package.json 现有的 scripts 属性中,添加 predeploy 和 deploy 属性。每个属性的值如下:
"scripts": { %%placeholder-start%%... %%placeholder-end%% "predeploy": "expo export:web", "deploy-hosting": "npm run predeploy && firebase deploy --only hosting", }
5
要部署,请运行以下命令:
- npm run deploy-hosting打开控制台输出中的 URL 来检查你的部署,例如:https://project-name.firebaseapp.com。
如果你想更改托管的 header,请在 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" } ] } ], } ]