Возможные варианты запуска NodeJS на Android (август 2017 г.)

тирую некоторые пакеты, созданные для NodeJS, на React Native, используяReactNativify переписать объектные зависимости Node API в их эквиваленты для просмотра.

Один из них являетсяcrypto, Вtransformer.js (или же.babelrc) У меня есть:

// 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: {
    crypto: 'crypto-browserify',
    // ...
  },
  throwForNonStringLiteral: true,
}],

В ReactNativifyglobal.js есть этот код (который я исключил, потому что он не предназначен для производства):

// Don't do this in production. You're going to want to patch in
// https://github.com/mvayngrib/react-native-randombytes or similar.
global.crypto = {
  getRandomValues(byteArray) {
    for (let i = 0; i < byteArray.length; i++) {
      byteArray[i] = Math.floor(256 * Math.random());
    }
  },
};

.

Мой первый вопрос: КакgetRandomValues&nbsp;правильно исправлено для производства?

Есть второй вариант, который используетreact-native-crypto&nbsp;(клонcrypto-browserify)

В идеале я должен быть в состоянии сделать это вtransformer.js:

  aliases: {
    crypto: 'react-native-crypto', // instead of 'crypto-browserify'
    // ...
  },

Ноreact-native-crypto&nbsp;использованиян-nodeify&nbsp;вместо ReactNativify, который генерируетshim.js&nbsp;быть импортированным вindex.android.js / index.ios.js&nbsp;с кодом, похожим на это:

if (require('./package.json').dependencies['react-native-crypto']) {
    const algos = require('browserify-sign/algos')
    if (!algos.sha256) {
        algos.sha256 = {
        "sign": "ecdsa",
        "hash": "sha256",
        "id": new Buffer("")
        }
    }

    if (typeof window === 'object') {
        const wCrypto = window.crypto = window.crypto || {}
        wCrypto.getRandomValues = wCrypto.getRandomValues || getRandomValues
    }

    const crypto = require('crypto')
    const randomBytes = crypto.randomBytes
    crypto.randomBytes = function (size, cb) {
        if (cb) return randomBytes.apply(crypto, arguments)

        const arr = new Buffer(size)
        getRandomValues(arr)
        return arr
    }

    crypto.getRandomValues = crypto.getRandomValues || getRandomValues

    function getRandomValues (arr) {
        // console.warn('WARNING: generating insecure psuedorandom number')
        for (var i = 0; i < arr.length; i++) {
        arr[i] = Math.random() * 256 | 0
        }

        return arr
    }
}

Я не знаю, нужен ли весь этот shim-код при использовании ReactNativify, и не смог найти хорошие источники, так что ...

Мой второй вопрос: Как пользоватьсяreact-native-crypto&nbsp;в «правильном пути ReactNativify»?

Я создал проблемы с github в ReactNativify и response-native-crypto repo's:

Как использовать getRandomValues ​​в производстве?Использование ReactNativify вместо rn-nodeify?

Версии:

node               7.10.1       /usr/local/bin/node  
npm                4.2.0        /usr/local/bin/npm   
yarn               0.24.6       /usr/bin/yarn        
react-native-cli   2.0.1       
app rn version     0.45.1      
ignite             2.0.0        /usr/local/bin/ignite