我想在不弹出我的中继应用的情况下使用create-react-app
。
根据Relay documentation,我需要babel-relay-plugin
。 relay-starter-kit
在.babelrc中配置了此内容。
最简单的方法是什么?有没有办法在不弹出的情况下启用relay
?
答案 0 :(得分:5)
CRA 2支持Babel宏,这使得事情变得更容易。基本上,您必须添加function TDSMethodValues.ClearReferenceParameters: boolean
并将其与babel-plugin-relay
一起使用。 Check out the docs了解更多信息。
一种选择是创建自己的import graphql from 'babel-plugin-relay/macro'
分叉,将react-scripts
添加到babel-relay-plugin
。创建.babelrc
的分支记录为method #3 in this Medium post。您可以将分支发布为scoped package to npm,然后在创建React应用时使用它:react-scripts
。
有些人可能更喜欢的另一种选择是create-react-app my-app --scripts-version @scope/react-scripts
:https://github.com/timarney/react-app-rewired - 我自己还没有对此进行过调查,但这似乎是另一种可能会减少这种情况的好办法需要保持react-app-rewired
的分叉。
答案 1 :(得分:3)
如果您不想维护自己的react-scripts
分叉,可以执行以下操作:
babel-plugin-relay
$ yarn add babel-plugin-relay
./setup.js
文件const fs = require('fs');
const path = require('path');
let file = path.resolve('./node_modules/babel-preset-react-app/index.js');
let text = fs.readFileSync(file, 'utf8');
if (!text.includes('babel-plugin-relay')) {
if (text.includes('const plugins = [')) {
text = text.replace(
'const plugins = [',
"const plugins = [\n require.resolve('babel-plugin-relay'),"
);
fs.writeFileSync(file, text, 'utf8');
} else {
throw new Error(`Failed to inject babel-plugin-relay in ${file}.`);
}
}
package.json
中的脚本以首先运行node setup
"scripts": {
"build": "node setup && react-scripts build",
"test": "node setup && react-scripts test --env=jsdom",
"start": "node setup && react-scripts start"
}
要获得完整的 Relay Modern + 创建React App 示例(包括路由),请访问:
GitHub上的答案 2 :(得分:1)
create-react-app v2 (react-scrips >= 2.0.0)
可以解决Relay Modern的问题!
您只需要babel-plugin-relay >= 1.7.0
,relay-compiler
和graphql
作为开发人员依赖项即可编译查询
然后,您需要一个schema.graphql
文件来声明您的GraphQL类型,当然还要声明react-relay
在运行start
之前,您只需要编译在graphql标记中可能添加或更改的所有查询。只需将脚本添加到package.json中,即可在监视模式下运行:
"relay": "relay-compiler --src ./src --schema ./schema.graphql"
答案 3 :(得分:0)
正如来自Relay团队的@gaearon和@josephsavona之间https://github.com/facebookincubator/create-react-app/issues/462所讨论的那样,他们希望在发布Relay 2之后将create-react-app中的Relay支持推迟。
由于Relay 2的发布已经出现,与此同时,我建议使用一个简单的hack来添加对create-react-app的支持并等待他们正式发布。
所以现在,您可以:
添加babel-plugin-react-relay(相信我设置比babel-relay-plugin更容易)到 package.json devDependencies ,设置你的package.json中的graphql端点,如
"graphql": {
"request": {
"url": "http://localhost:8000/graphql"
}
},
然后运行yarn
导航到 ./ node_modules / react-scripts / config / webpack.config.dev.js ,使用⌘+ F 进行定位
presets: [require.resolve('babel-preset-react-app')],
在presets
下面添加以下行:
plugins: [require.resolve('babel-plugin-react-relay')],
另外,使用以下方式在上述行之后立即转动cacheDirectory
:
cacheDirectory: false
这是为了确保每次都能通过 babel-plugin-react-relay 正确地重新获取GraphQL架构。这不会有害,因为我们将很快使用官方的create-react-app和Relay支持:)
yarn start
,你很高兴希望这可以让您在没有yarn run eject
代码的情况下开始使用Relay。并且一旦发布,请记得迁移到官方Relay 2支持的create-react-app(我怀疑你不必做任何事情)