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 应用可以在本地进行服务,以测试生产环境的行为。一旦测试阶段通过,你可以选择各种第三方服务来托管它。
🌐 A web app created using Expo can be served locally for testing out the production behavior. Once the testing phase checks out, you can choose from a variety of third-party services to host it.
| 打包工具 | Expo 路由 | API 路由 | 描述 |
|---|---|---|---|
webpack | 在输出目录中输出一个单页面应用 (SPA),包含一个单独的 index.html |
创建网络构建
🌐 Create a web build
创建项目的网页版本是发布网页应用的第一步。无论你是想在本地运行还是托管到第三方服务,你都需要导出项目的所有 JavaScript 和资源。这被称为静态包。可以通过运行以下命令来导出:
🌐 Creating a web build of the project is the first step to publishing a web app. Whether you want to serve it locally or host it on a third-party service, you have to export all JavaScript and assets of a project. This is known as a static bundle. It can be exported by running the following command:
运行 webpack export 命令来编译 Web 项目:
🌐 Run the webpack export command to compile the project for web:
- npx expo export:web生成的项目文件位于 web-build 目录中。web 目录中的任何文件也会被复制到 web-build 目录中。
🌐 The resulting project files are in the web-build directory. Any files inside the web directory are also copied to the web-build directory.
如果你对项目进行了更改,请重新构建以用于生产环境。不要直接编辑 web-build 目录。
🌐 If you make changes to your project, rebuild it for production. Do not edit the web-build directory directly.
本地服务
🌐 Serve locally
使用 Serve CLI 快速在本地测试你的网站在生产环境中的托管情况。运行以下命令来提供静态资源包:
🌐 Use Serve CLI to quickly test locally how your website will be hosted in production. Run the following command to serve the static bundle:
运行以下命令来服务单页应用:
🌐 Run the following command to serve the single-page application:
- npx serve web-build --single打开 http://localhost:5000 查看你的项目运行效果。此方法 仅限 HTTP,因此权限、相机、位置以及许多其他功能将无法使用。
🌐 Open http://localhost:5000 to see your project in action. This method is HTTP only, so permissions, camera, location, and many other things won't work.
服务器子目录
🌐 Server a sub-directory
如果你想在子目录中提供你的网站,请按照下面的示例将其路径添加到你的 package.json 中:
🌐 If you want to serve your site in a sub-directory, add its path to your package.json as shown below:
{ "homepage": "/path/to/sub-directory" }
托管在第三方服务上
🌐 Hosting on third-party services
Netlify
Netlify 是一个几乎不带偏见的 Web 应用部署平台。它与 Expo Web 应用的兼容性最高,因为它对框架几乎没有任何假设。
使用 Netlify CDN 手动部署
🌐 Manual deployment with the Netlify CDN
1
通过运行以下命令安装 Netlify CLI:
🌐 Install the Netlify CLI by running the following command:
- npm install -g netlify-cli2
为单页应用配置重定向。
🌐 Configure redirects for single-page applications.
如果你的应用实现了任何导航功能,你需要配置 Netlify 将请求重定向到单个 web-build/index.html 文件。可以在 Netlify 中通过创建一个 ./public/_redirects 文件,并将所有请求重定向到 /index.html 来实现。
🌐 If your app implements any navigation, you'll need to configure Netlify to redirect requests to the single web-build/index.html file. This can be done in Netlify by creating a ./public/_redirects file and redirecting all requests to /index.html.
进入 web-build 目录,并运行以下命令来创建包含以下规则的 _redirects 文件:
🌐 Navigate inside the web-build directory and run the following command to create _redirects file with following rule:
/* /index.html 200
如果你修改了此文件,必须使用 npx expo export:web 重新构建项目,以便将其安全地复制到 web-build 目录中。
🌐 If you modify this file, you must rebuild your project with npx expo export:web to have it safely copied into the web-build directory.
3
通过运行以下命令来部署 web 构建目录:
🌐 Deploy the web build directory by running the following command:
- netlify deploy --dir web-build你将看到一个 URL,你可以使用它在线查看你的项目。
🌐 You will see a URL that you can use to view your project online.
持续交付
🌐 Continuous delivery
当你推送到 Git 或打开新的拉取请求时,Netlify 也可以进行构建和部署:
🌐 Netlify can also build and deploy when you push to git or open a new pull request:
- 开始一个新的 Netlify 项目。
- 选择你的 Git 托管服务并选择你的仓库。
- 点击 建立你的网站。
Vercel
Vercel 有一个单命令部署流程。
1
2
为单页应用配置重定向。在应用根目录创建一个 vercel.json 文件,并添加以下内容:
{ "buildCommand": "expo export:web", "outputDirectory": "web-build", "devCommand": "expo", "cleanUrls": true, "framework": null, "rewrites": [ { "source": "/:path*", "destination": "/" } ] }
3
部署网站。
- vercel你现在将看到一个可以用来在线查看项目的 URL。当构建完成后,将该 URL 粘贴到浏览器中,即可查看已部署的应用。
🌐 You will now see a URL that you can use to view your project online. Paste that URL into your browser when the build is complete, and see your deployed app.
AWS Amplify 控制台
🌐 AWS Amplify Console
AWS Amplify 控制台 提供了基于 Git 的工作流程,用于持续部署和托管全栈无服务器 Web 应用。Amplify 会从存储库而非你的计算机部署你的 PWA,因此你必须使用 GitHub 存储库。在开始之前,在 GitHub 上创建一个新的存储库。
🌐 The AWS Amplify Console provides a Git-based workflow for continuously deploying and hosting full-stack serverless web apps. Amplify deploys your PWA from a repository instead of your computer, so you must use a GitHub repository. Before starting, create a new repo on GitHub.
1
将 amplify-explicit.yml 文件添加到仓库的根目录。确保已从 .gitignore 文件中移除生成的 dist 目录,并提交这些更改。
🌐 Add the amplify-explicit.yml file to the root of your repository. Ensure you have removed the generated dist directory from the .gitignore file and committed those changes.
2
将你的本地 Expo 项目推送到 GitHub 仓库。如果你还没有推送到 GitHub,请按照GitHub 的指南将现有项目添加到 GitHub操作。
🌐 Push your local Expo project to a GitHub repository. If you have not pushed to GitHub yet, follow GitHub's guide to add an existing project to GitHub.
3
登录 Amplify 控制台,选择一个现有应用或创建一个新应用。授予 Amplify 权限以读取你的 GitHub 账户或拥有你仓库的组织。
🌐 Login to the Amplify Console and select an existing app or create a new app. Grant Amplify permission to read from your GitHub account or the organization that owns your repo.
4
添加你的仓库,选择分支,然后选择 Connecting a monorepo? 来输入你应用的 dist 目录路径,并选择 Next。
🌐 Add your repo, select the branch, and select Connecting a monorepo? to enter the path to your app's dist directory and choose Next.
Amplify 控制台会检测到你项目中的 amplify.yml 文件。请选择 允许 AWS Amplify 自动部署项目根目录中托管的所有文件,然后点击 下一步。
🌐 The Amplify Console will detect the amplify.yml file in your project. Select Allow AWS Amplify to automatically deploy all files hosted in your project root directory and choose Next.
5
查看你的设置并选择 保存并部署。你的应用现在将部署到 https://branchname.xxxxxx.amplifyapp.com URL。你现在可以访问你的 Web 应用,部署另一个分支,或在你的 Expo 移动和 Web 应用之间添加统一的后端环境。
🌐 Review your settings and choose Save and deploy. Your app will now be deployed to a https://branchname.xxxxxx.amplifyapp.com URL. You can now visit your web app, deploy another branch, or add a unified backend environment across your Expo mobile and web apps.
按照 了解如何充分利用 Amplify Hosting 下拉菜单中的步骤操作,以 添加带免费 SSL 证书的自定义域 以及获取更多信息。
🌐 Follow the steps in the Learn how to get the most out of Amplify Hosting drop-down to Add a custom domain with a free SSL certificate and more information.
GitHub 页面
🌐 GitHub Pages
GitHub Pages 允许你直接从 GitHub 仓库发布网站。
1
首先在你的项目中初始化一个新的 git 仓库。如果已经完成此操作,则跳过此步骤。
🌐 Start by initializing a new git repository in your project. If this is already done, skip this step.
如果不是,那么你需要在项目的根目录下运行以下命令:
🌐 If not then you'll want to run the following command in your project's root directory:
- git init2
将 GitHub 仓库作为 remote 添加到你的本地 git 仓库中。
🌐 Add the GitHub repository as a remote in your local git repository.
- git remote add origin https://github.com/username/expo-gh-pages.git运行上述命令会让 git 知道你想将源代码推送到哪个仓库。同时,它还会让 gh-pages 包(在下一步中安装)知道你想将应用部署到哪里。
🌐 Running the above command makes git know to which repository you want to push your source code. It also makes the gh-pages package (installed in the next step) know where you want to deploy your app.
3
在你的项目中将 gh-pages 包作为 dev-dependency 安装:
🌐 Install the gh-pages package as a dev-dependency in your project:
- yarn add -D gh-pages4
配置你项目的 package.json 用于网页托管。首先添加一个 homepage 属性。将其值设置为字符串 http://{username on GitHub}.github.io/{repo-name}。
🌐 Configure your project's package.json for web hosting. Start by adding a homepage property. Set its value to the string http://{username on GitHub}.github.io/{repo-name}.
例如,如果 GitHub 用户名是 dev,GitHub 仓库是 expo-gh-pages,则 homepage 属性的值将如下所示:
🌐 For example, if a GitHub username is called dev and the GitHub repository is expo-gh-pages, the following will be the value of the homepage property:
{ "homepage": "http://dev.github.io/expo-gh-pages" }
在同一个文件中,通过添加 predeploy 和 deploy 属性来修改 scripts 属性。每个属性都有其各自的值,如下所示:
🌐 In the same file, modify the scripts property by adding predeploy and deploy properties. Each has its own value as shown:
"scripts": { %%placeholder-start%%... %%placeholder-end%% "deploy": "gh-pages -d web-build", "predeploy": "expo export:web" }
5
要生成应用的生产构建并将其部署到 GitHub Pages,请运行以下命令:
🌐 To generate a production build of your app, and deploy it to GitHub Pages, run the following command:
- yarn deploy你的网页应用现在可以通过你在 package.json 中设置为 homepage 的 URL 访问。
🌐 Your web app is now available at the URL you set as homepage in your package.json.
当你将代码发布到你的仓库时,例如:
gh-pages,它会在你的仓库中创建并推送代码到一个分支。该分支将包含你的构建代码,但不包括你的开发源代码。
Firebase 托管
🌐 Firebase hosting
Firebase Hosting 是面向 Web 项目的生产级 Web 内容托管服务。
1
通过 Firebase 控制台 创建一个 Firebase 项目,并按照这些 说明 安装 Firebase CLI。
🌐 Create a firebase project with the Firebase Console and install the Firebase CLI by following these instructions.
2
使用 CLI,通过运行以下命令登录到你的 Firebase 账户:
🌐 Using the CLI, login to your Firebase account by running the command:
- firebase login3
然后,通过运行以下命令初始化你的 Firebase 项目以进行托管:
🌐 Then, initialize your firebase project to host by running the command:
- firebase init设置将取决于你如何搭建你的 Expo 网站:
🌐 The settings will depend on how you built your Expo website:
当被问到公共路径时,确保指定 web-build 目录。另外,当提示 是否将其配置为单页应用(将所有 URL 重写为 /index.html) 时,选择 是。
🌐 When asked about the public path, make sure to specify the web-build directory. Also, when prompted Configure as a single-page app (rewrite all urls to /index.html), select Yes.
4
在现有的 package.json 的 scripts 属性中,添加 predeploy 和 deploy 属性。它们各自的值如下:
🌐 In the existing scripts property of package.json, add predeploy and deploy properties. Each has the following values:
"scripts": { %%placeholder-start%%... %%placeholder-end%% "predeploy": "expo export:web", "deploy-hosting": "npm run predeploy && firebase deploy --only hosting", }
5
要部署,请运行以下命令:
🌐 To deploy, run the following command:
- npm run deploy-hosting从控制台输出中打开 URL 以检查你的部署,例如:https://project-name.firebaseapp.com。
🌐 Open the URL from the console output to check your deployment, for example: https://project-name.firebaseapp.com.
如果你想更改宿主的标题,请在 firebase.json 中为 hosting 部分添加以下配置:
🌐 In case you want to change the header for hosting add the following config for hosting section in 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" } ] } ], } ]