コンテンツにスキップ

Runtimes, Adapters, Templates, and Deployment

このコンテンツはまだ日本語訳がありません。

运行时、适配器、模板和部署

部署 Remix 应用程序分为四层:

  1. 像 Node.js 这样的 JavaScript 运行时
  2. 像 Express.js 这样的 JavaScript 网络服务器
  3. @remix-run/express 这样的服务器适配器
  4. 网络主机或平台

根据您的网络主机,您的层数可能会更少。例如,部署到 Cloudflare Pages 可同时处理 2、3 和 4。在 Express 应用程序中部署 Remix 将处理所有四个层,而使用Remix App Server可将 2 和 3 结合起来!

您可以自行连接所有这些,或者从 Remix 模板开始。

让我们谈谈每个部分的作用。

JavaScript 运行时

Remix 可以部署到任何 JavaScript 运行时,如 Node.js、Shopify Oxygen、Cloudflare Workers/Pages、Fastly Compute、Deno、Bun 等。

每个运行时对 Remix 所基于的标准 Web API 的支持各不相同,因此需要 Remix 运行时包来填充运行时所缺少的任何功能。这些填充包括 Web 标准 API,如请求、响应、加密等。这样,您就可以在服务器上使用与浏览器中相同的 API。

可用的运行时包如下:

您在应用中与之交互的大多数 API 并非直接从这些包中导入,因此您的代码在运行时之间具有相当好的可移植性。但是,偶尔您会从这些包中导入一些非标准 Web API 的特定功能。

例如,您可能希望将 Cookie 存储在文件系统或 Cloudflare KV 存储中。以下是运行时的特定功能,不会与其他运行时共享:

// store sessions in cloudflare KV storage
import { createWorkersKVSessionStorage } from "@remix-run/cloudflare";
// store sessions on the file system in node
import { createFileSessionStorage } from "@remix-run/node";

但是如果你将会话存储在 cookie 本身中,则所有运行时都支持此功能:

import { createCookieSessionStorage } from "@remix-run/node"; // or cloudflare/deno

适配器

Remix 不是 HTTP 服务器,而是现有 HTTP 服务器内的处理程序。适配器允许 Remix 处理程序在 HTTP 服务器内运行。一些 JavaScript 运行时(尤其是 Node.js)有多种创建 HTTP 服务器的方法。例如,在 Node.js 中,您可以使用 Express.js、fastify 或原始http.createServer

这些服务器中的每一个都有自己的请求/响应 API。适配器的工作是将传入的请求转换为 Web Fetch 请求,运行 Remix 处理程序,然后将 Web Fetch 响应适配回主机服务器的响应 API。

下面是一些说明该流程的伪代码。

// import the app build created by `remix build`
import build from "./build/index.js";
// an express http server
const app = express();
// and here your Remix app is "just a request handler"
app.all("*", createRequestHandler({ build }));
// This is pseudo code, but illustrates what adapters do:
export function createRequestHandler({ build }) {
// creates a Fetch API request handler from the server build
const handleRequest = createRemixRequestHandler(build);
// returns an express.js specific handler for the express server
return async (req, res) => {
// adapts the express.req to a Fetch API request
const request = createRemixRequest(req);
// calls the app handler and receives a Fetch API response
const response = await handleRequest(request);
// adapts the Fetch API response to the express.res
sendRemixResponse(res, response);
};
}

Remix 应用服务器

为了方便起见,Remix App Server 是一个基本的快速服务器,适用于新项目、修补或对 Express 等服务器没有任何特定需求并部署到 Node.js 环境的项目。

参见 @remix-run/serve

模板

Remix 的设计非常灵活,只需提供足够的意见即可将 UI 连接到后端,但不会对使用的数据库、缓存数据的方式或应用程序的部署位置和方式提出意见。

Remix 模板是应用程序开发的起点,其中包含了社区创建的所有这些额外的意见。

您可以在 Remix CLI 中使用带有 --template 标志的模板,该模板指向 GitHub 上的存储库:

npx create-remix@latest --template <org>/<repo>

您可以在模板指南中阅读有关模板的更多信息。

一旦您选择了模板或[从头开始设置应用程序][快速入门],您就可以开始构建您的应用程序了!