跳过主内容
版本:v18.0.0

安装

在许多情况下,安装 Relay 最简单的方法是使用 Tobias Tengler 编写的 create-relay-app 包。与名称建议的相反,此包安装 Relay 到您的现有应用程序中。

它目前支持基于 Next、Vite 和 Create React App 的应用程序。如果您不在这些平台之一,或者它由于某种原因对您不起作用,请继续执行以下手动步骤。

要运行它,请确保您有一个干净的工作目录并运行

npm create @tobiastengler/relay-app

(或者根据您的喜好使用 yarnpnpm 而不是 npm)。

完成后,它将打印一些供您遵循的“下一步”。

有关此脚本的更多详细信息,请访问其GitHub 仓库


手动安装

使用 yarnnpm 安装 React 和 Relay

yarn add react react-dom react-relay

设置编译器

Relay 的提前编译需要Relay 编译器,您可以通过 yarnnpm 安装它

yarn add --dev relay-compiler

这将在您的 node_modules 文件夹中安装 bin 脚本 relay-compiler。建议通过将脚本添加到您的 package.json 文件中从 yarn/npm 脚本运行它

"scripts": {
"relay": "relay-compiler"
}

编译器配置

创建配置文件

// relay.config.js
module.exports = {
// ...
// Configuration options accepted by the `relay-compiler` command-line tool and `babel-plugin-relay`.
src: "./src",
language: "javascript", // "javascript" | "typescript" | "flow"
schema: "./data/schema.graphql",
excludes: ["**/node_modules/**", "**/__mocks__/**", "**/__generated__/**"],
}

此配置也可以在 package.json 文件的 "relay" 部分中指定。有关更多详细信息和配置选项,请参见:Relay 编译器配置

设置 babel-plugin-relay

Relay 需要一个 Babel 插件来将 GraphQL 转换为运行时工件

yarn add --dev babel-plugin-relay graphql

"relay" 添加到您的 .babelrc 文件中插件列表

{
"plugins": [
"relay"
]
}

请注意,"relay" 插件应该在其他插件或预设之前运行,以确保 graphql 模板文字被正确转换。有关此主题,请参阅 Babel 的文档

或者,您可以使用babel-plugin-macros 而不是使用 babel-plugin-relay 来使用 Relay。在安装 babel-plugin-macros 并将其添加到您的 Babel 配置后

const graphql = require('babel-plugin-relay/macro');

运行编译器

在对应用程序文件进行编辑后,只需运行 relay 脚本即可生成新的编译工件

yarn run relay

或者,您可以传递 --watch 选项来监视源代码中的文件更改并自动重新生成编译后的工件(注意:需要安装watchman

yarn run relay --watch

有关更多详细信息,请查看我们的Relay 编译器文档

JavaScript 环境要求

在 NPM 上分发的 Relay 包使用广泛支持的 ES5 版本的 JavaScript 来支持尽可能多的浏览器环境。

但是,Relay 预期现代 JavaScript 全局类型(MapSetPromiseObject.assign)已被定义。如果您支持可能尚未原生提供这些类型的较旧浏览器和设备,请考虑在捆绑的应用程序中包含全局 polyfill,例如core-js@babel/polyfill

使用core-js 支持较旧浏览器的 Relay 的 polyfill 环境可能如下所示

require('core-js/es6/map');
require('core-js/es6/set');
require('core-js/es6/promise');
require('core-js/es6/object');

require('./myRelayApplication');

此页面有用吗?

通过以下方式帮助我们改善网站 回答几个简短的问题.