快速入门 (5分钟)
本页内容

快速入门

本指南将帮助您尽快熟悉运行 Remix 应用所需的基本流程。虽然有很多带有不同运行时、部署目标和数据库的入门模板,但我们将从头开始创建一个最基本的项目。

当您准备好认真对待您的 Remix 项目时,您可以考虑从社区模板开始。它们包括 TypeScript 设置、数据库、测试工具、身份验证等等。您可以在 Remix 资源 页面找到社区模板列表。

安装

如果您更喜欢初始化一个包含所有必要功能的 Remix 项目,可以使用 create-remix CLI

npx create-remix@latest

但是,本指南将解释 CLI 为设置您的项目所做的所有操作,并且您可以按照以下步骤操作,而不是使用 CLI。如果您刚开始使用 Remix,我们建议您遵循本指南以了解构成 Remix 应用的不同部分。

mkdir my-remix-app
cd my-remix-app
npm init -y

# install runtime dependencies
npm i @remix-run/node @remix-run/react @remix-run/serve isbot@4 react react-dom

# install dev dependencies
npm i -D @remix-run/dev vite

Vite 配置

touch vite.config.js

由于 Remix 使用 Vite,因此您需要使用 Remix Vite 插件提供一个 Vite 配置。以下是您需要的基本配置

import { vitePlugin as remix } from "@remix-run/dev";
import { defineConfig } from "vite";

export default defineConfig({
  plugins: [remix()],
});

根路由

mkdir app
touch app/root.jsx

app/root.jsx 是我们所说的“根路由”。它是整个应用程序的根布局。以下是任何项目都需要的一组基本元素

import {
  Links,
  Meta,
  Outlet,
  Scripts,
} from "@remix-run/react";

export default function App() {
  return (
    <html>
      <head>
        <link
          rel="icon"
          href="data:image/x-icon;base64,AA"
        />
        <Meta />
        <Links />
      </head>
      <body>
        <h1>Hello world!</h1>
        <Outlet />

        <Scripts />
      </body>
    </html>
  );
}

构建和运行

首先为生产环境构建应用程序

npx remix vite:build

您现在应该会看到一个 build 文件夹,其中包含一个 server 文件夹(应用程序的服务器版本)和一个 client 文件夹(浏览器版本),其中包含一些构建工件。(这都是 可配置的。)

👉 使用 remix-serve 运行应用程序

首先,您需要在 package.json 中将类型指定为模块,以便 remix-serve 可以运行您的应用程序。

{
  "type": "module"
  // ...
}

现在您可以使用 remix-serve 运行您的应用程序

# note the dash!
npx remix-serve build/server/index.js

您应该能够打开 https://127.0.0.1:3000 并查看“hello world”页面。

除了 node_modules 中数量庞大的代码外,我们的 Remix 应用程序只是一个文件

├── app/
│   └── root.jsx
└── package.json
└── vite.config.js

自带服务器

remix vite:build 创建的 build/server 目录只是一个模块,您可以在 Express、Cloudflare Workers、Netlify、Vercel、Fastly、AWS、Deno、Azure、Fastify、Firebase 等任何服务器中运行它。

如果您不想设置自己的服务器,可以使用 remix-serve。它是一个由 Remix 团队维护的基于 Express 的简单服务器。但是,Remix 专门设计用于在任何 JavaScript 环境中运行,以便您拥有自己的技术栈。预计许多(如果不是大多数)生产应用程序将拥有自己的服务器。您可以在 运行时、适配器和技术栈 中阅读更多相关内容。

为了好玩,让我们停止使用remix-serve,改用express。

👉 安装Express、Remix Express适配器和cross-env用于在生产模式下运行

npm i express @remix-run/express cross-env

# not going to use this anymore
npm uninstall @remix-run/serve

👉 创建Express服务器

touch server.js
import { createRequestHandler } from "@remix-run/express";
import express from "express";

// notice that the result of `remix vite:build` is "just a module"
import * as build from "./build/server/index.js";

const app = express();
app.use(express.static("build/client"));

// and your app is "just a request handler"
app.all("*", createRequestHandler({ build }));

app.listen(3000, () => {
  console.log("App listening on https://127.0.0.1:3000");
});

👉 使用express运行你的应用

node server.js

现在你拥有了自己的服务器,你可以使用服务器自带的任何工具来调试你的应用。例如,你可以使用Node.js inspect标志在chrome开发者工具中检查你的应用。

node --inspect server.js

开发流程

无需每次都停止、重建和启动服务器,你可以使用中间件模式下的Vite在开发环境中运行Remix。这使得React Refresh(热模块替换)和Remix热数据重新验证能够即时反馈应用中的更改。

首先,为了方便起见,在package.json中添加devstart命令,分别用于在开发和生产模式下运行你的服务器。

👉 package.json中添加“scripts”条目

{
  "scripts": {
    "dev": "node ./server.js",
    "start": "cross-env NODE_ENV=production node ./server.js"
  }
  // ...
}

👉 将Vite开发中间件添加到你的服务器

如果process.env.NODE_ENV设置为"production",则不会应用Vite中间件,在这种情况下,你仍然会像之前一样运行常规构建输出。

import { createRequestHandler } from "@remix-run/express";
import express from "express";

const viteDevServer =
  process.env.NODE_ENV === "production"
    ? null
    : await import("vite").then((vite) =>
        vite.createServer({
          server: { middlewareMode: true },
        })
      );

const app = express();
app.use(
  viteDevServer
    ? viteDevServer.middlewares
    : express.static("build/client")
);

const build = viteDevServer
  ? () =>
      viteDevServer.ssrLoadModule(
        "virtual:remix/server-build"
      )
  : await import("./build/server/index.js");

app.all("*", createRequestHandler({ build }));

app.listen(3000, () => {
  console.log("App listening on https://127.0.0.1:3000");
});

👉 启动开发服务器

npm run dev

现在你可以立即获得反馈地处理你的应用。试一试,更改root.jsx中的文本,然后观察!

控制服务器和浏览器入口

Remix使用一些默认的魔法文件,大多数应用不需要修改,但如果你想自定义Remix到服务器和浏览器的入口点,你可以运行remix reveal,它们将被转储到你的项目中。

npx remix reveal
Entry file entry.client created at app/entry.client.tsx.
Entry file entry.server created at app/entry.server.tsx.

总结

恭喜,你可以把Remix添加到你的简历上了!总结一下,我们学到了

  • Remix将你的应用编译成两部分
    • 一个你添加到自己的JavaScript服务器中的请求处理器
    • 一堆用于浏览器的公共目录中的静态资源
  • 你可以使用适配器自带的服务器部署到任何地方
  • 你可以设置一个内置HMR的开发流程

总的来说,Remix有点“底层”。一些简单的样板代码,但现在你拥有了自己的技术栈。

接下来是什么?

文档和示例根据以下许可证授权 MIT