2015-08-27 2 views
14

Как вывести конечную точку graphql для реагирования на собственное приложение? Кто-нибудь использовал реле в своем родном приложении? Примеры в техническом обзоре реле https://facebook.github.io/relay/docs/getting-started.html использования WebPack служить реле приложение и подвергать его воздействию на graphql сервер:Использование реле в ответе на собственное приложение

import express from 'express'; 
import graphQLHTTP from 'express-graphql'; 
import path from 'path'; 
import webpack from 'webpack'; 
import WebpackDevServer from 'webpack-dev-server'; 
import {StarWarsSchema} from './data/starWarsSchema'; 

const APP_PORT = 3000; 
const GRAPHQL_PORT = 8080; 

// Expose a GraphQL endpoint 
var graphQLServer = express(); 
graphQLServer.use('/', graphQLHTTP({schema: StarWarsSchema, pretty: true})); 
graphQLServer.listen(GRAPHQL_PORT,() => console.log(
    `GraphQL Server is now running on http://localhost:${GRAPHQL_PORT}` 
)); 

// Serve the Relay app 
var compiler = webpack({ 
    entry: path.resolve(__dirname, 'js', 'app.js'), 
    eslint: { 
    configFile: '.eslintrc' 
    }, 
    module: { 
    loaders: [ 
     { 
     test: /\.js$/, 
     loader: 'babel', 
     query: { 
      stage: 0, 
      plugins: ['./build/babelRelayPlugin'] 
     } 
     }, 
     { 
     test: /\.js$/, 
     loader: 'eslint' 
     } 
    ] 
    }, 
    output: {filename: 'app.js', path: '/'} 
}); 
var app = new WebpackDevServer(compiler, { 
    contentBase: '/public/', 
    proxy: {'/graphql': `http://localhost:${GRAPHQL_PORT}`}, 
    publicPath: '/js/', 
    stats: {colors: true} 
}); 
// Serve static resources 
app.use('/', express.static('public')); 
app.use('/node_modules', express.static('node_modules')); 
app.listen(APP_PORT,() => { 
    console.log(`Relay Star Wars is now running on http://localhost:${APP_PORT}`); 
}); 

но реагируют местные применения реагируют-родной упаковщик связать свои модули; кто-нибудь пытался использовать реле в ответном родном приложении?

ответ

4

Теперь можно использовать реакцию native и relay вместе.

Github объявление:https://github.com/facebook/relay/issues/26

Инструкции для существующих приложений RN:http://pulse.mixrt.com/discussion/26/technical-making-relay-work-with-existing-react-native-apps-a-step-by-step-tutorial.

Копия инструкции:

  1. Резервное копирование проекта.
  2. Убедитесь, что ваш сервер GraphQL готов и ваш schema.json тоже под рукой. Для получения более подробной информации о последних двух посетите страницу проекта React-Relay.
  3. Убедитесь, что вы используете `npm` версию 3 или более.
  4. Если пакет «Реактивный род» запускается где-то в фоновом режиме, вы должны остановить его сейчас.
  5. Запуск:
    watchman watch-del-all
    , а также:
    rm -rf $TMPDIR/react-*
    , чтобы избежать столкновения с проблемой известного упаковщика (https://github.com/facebook/react-native/issues/4968).
  6. Удалите каталог `./Node_modules` из вашего проекта.
  7. Корректировать `package.json` файл, убедитесь, что он имеет следующее:
     "dependencies": { 
         "react": "^0.14.7", 
         "react-native": "facebook/react-native", 
         "react-relay": "^0.7.3" 
        }, 
        "devDependencies": { 
         "babel-core": "^6.6.4", 
         "babel-preset-react-native": "^1.4.0", 
         "babel-relay-plugin": "^0.7.3" 
        }
    Вавилонская версия особенно важна. Убедитесь, что ваш проект использует babel 6.5 или новее, мы нуждаемся в нем для функции passPerPreset в файле .babelrc.
  8. Создать новый файл `.babelrc` и поместить его в директорию вашего проекта:
     { 
         "presets": [ 
         "./scripts/babelRelayPlugin", 
         "react-native" 
         ], 
         "passPerPreset": true 
        }
  9. Создать новый файл в директории вашего проекта под названием` babelRelayPlugin.js` со следующим содержанием:
     const getBabelRelayPlugin = require('babel-relay-plugin'); 
        const schema = require('./schema.json'); 
    
        module.exports = { plugins: [getBabelRelayPlugin(schema.data)] };
    Скопируйте файл `schema.json` в каталог проекта.
  10. Пробег:
    npm install
+2

Я пробовал это решение, но получил: «SyntaxError:« import »и« export »могут отображаться только с« sourceType: module »« несколько ». Похоже, что-то не так с моим .babelrc. Вы можете помочь с этим? – Vovik

+0

Выше ссылка для Инструкции для существующих приложений RN больше недоступна (страница возврата не найдена). – yara

-2
  1. вам необходимо установить react-relay пакет для react-native приложения

  2. До точки входа вашей реакции-родное приложение, впрыснуть сетевого уровня с URL вы подвержены

Relay.injectNetworkLayer(
 
    new Relay.DefaultNetworkLayer('http://localhost:8000/graphql') 
 
);

+4

Вы уверены, что реагируют-реле может работать с реагировать родной? Я не думаю, что в настоящее время реакция-реле зависит от реакции и реагирования. См. Https://github.com/facebook/relay/issues/26 – gre

3

Вы можете найти рабочую версию в here, до this.

+0

. Вам нужно добавить объяснение с данным решением, как указано в ссылках. работать в будущем. –

+1

Полное объяснение проблемы и ее решение можно найти на странице проблемы. Это слишком много, чтобы написать их здесь. – lenaten

Смежные вопросы