2016-11-16 14 views
3

私は、ネイティブプロジェクトに反応してノードjsをバックエンドとして使用したいと思います。反応するネイティブアプリケーション内でnodejsコードを使用できますか?

+0

WebServiceを構築することを念頭に置いている場合は、アプリケーションとそのバックエンドがhttpを介して通信するため、すべてを行うことができます。 – Hitmands

+0

返信いただきありがとうございます。http: //www.w3resource.com/node.js/nodejs-sqlite.php)私はまったく同じですが、ネイティブの反応が必要です。 –

+0

Webサービス用に別のコードを使いたくないので、ネイティブプロジェクトに対応するためにノードjsコードを使用します。それは可能ですか? –

答えて

3

はい ReactNativifyを使用してノード用に書かれたパッケージをBig Richとして正当な状態で使用してください。しかし、考慮すべき いくつかの点:

1)私は、問題リストで見つかったアドバイスに従い、2部でtransformer.jsを分割:

transformers.js(/config中とrn-cli.config.jsから起動):

(また、 /configで)
const babelTransformer = require('./babel-transformer'); 

module.exports.transform = function(src, filename, options) { 

    const extension = String(filename.slice(filename.lastIndexOf('.'))); 
    let result; 

    try { 

    result = babelTransformer(src, filename); 

    } catch (e) { 

    throw new Error(e); 
    return; 
    } 

    return { 
    ast: result.ast, 
    code: result.code, 
    map: result.map, 
    filename 
    }; 
}; 

バベル-transformer.js:

'use strict' 

const babel = require('babel-core'); 

/** 
* This is your `.babelrc` equivalent. 
*/ 
const babelRC = { 
    presets: ['react-native'], 
    plugins: [ 

    // The following plugin will rewrite imports. Reimplementations of node 
    // libraries such as `assert`, `buffer`, etc. will be picked up 
    // automatically by the React Native packager. All other built-in node 
    // libraries get rewritten to their browserify counterpart. 

    [require('babel-plugin-rewrite-require'), { 
     aliases: { 
      constants: 'constants-browserify', 
      crypto: 'react-native-crypto', 
      dns: 'mock/dns', 
      domain: 'domain-browser', 
      fs: 'mock/empty', 
      http: 'stream-http', 
      https: 'https-browserify', 
      net: 'mock/net', 
      os: 'os-browserify/browser', 
      path: 'path-browserify', 
      pbkdf2: 'react-native-pbkdf2-shim', 
      process: 'process/browser', 
      querystring: 'querystring-es3', 
      stream: 'stream-browserify', 
      _stream_duplex: 'readable-stream/duplex', 
      _stream_passthrough: 'readable-stream/passthrough', 
      _stream_readable: 'readable-stream/readable', 
      _stream_transform: 'readable-stream/transform', 
      _stream_writable: 'readable-stream/writable', 
      sys: 'util', 
      timers: 'timers-browserify', 
      tls: 'mock/tls', 
      tty: 'tty-browserify', 
      vm: 'vm-browserify', 
      zlib: 'browserify-zlib' 
     }, 
     throwForNonStringLiteral: true 
    }], 

    // Instead of the above you could also do the rewriting like this: 

    ["module-resolver", { 
     "alias": { 
     "mock": "./config/mock", 
     "sodium-universal": "libsodium" 
     } 
    }] 
    ] 
}; 

module.exports = (src, filename) => { 

    const babelConfig = Object.assign({}, babelRC, { 
    filename, 
    sourceFileName: filename 
    }); 

    const result = babel.transform(src, babelConfig); 
    return { 
    ast: result.ast, 
    code: result.code, 
    map: result.map, 
    filename 
    }; 
} 

2)上記のコードでわかるように、私はbabel-plugin-module-resolverを使って実演しました。

注:ReactNativeが使用するプラグインの代わりにこのプラグインを使用します。それはあなたがローカルファイルを参照することができ、かつ適切な引用符で書かれた「ナトリウム - ユニバーサル」

注2のような非JS準拠の名前を許可またはこのコメントに概説されているよう.babelrc溶液(多分クリーン)のために行く:https://github.com/philikon/ReactNativify/issues/4#issuecomment-312136794

3)Jestテストの作業をするために、プロジェクトのルートにまだ.babelrcが必要であることがわかりました。 https://github.com/philikon/ReactNativify/issues/8

+0

PSノードバインドの多い場所に移植しようとしていたパッケージですから、別のアプローチも検討しています:[AndroidのネイティブライブラリとしてのNodeJSのコンパイル](https://stackoverflow.com/q/) 45459909/8295283) –

+0

非常に有用な要約、ありがとう。 –

+0

@ArnoldSchrijver概要をお寄せいただきありがとうございます。私はあなたのアプローチを採用しようとしましたが、エラー:バンドルに失敗しました:TypeError:transform.jsの 'undefined of slice'プロパティを読み取れません。特に 'const extension = String(filename.slice(filename.lastIndexOf( '。'))); ' 何故? –

関連する問題