2016-04-05 19 views
6

sto lavorando per l'attuazione del pacchetto di twilio nel mio progetto reagire-native e quando lo richiedono nel mio file del carico di progetto abituato e sto vedendo il seguente errore:Twilio React Native - Impossibile risolvere modulo crittografico

Unable to resolve module crypto from /Users/[myname]/Documents/Projects/React-Native/[app-name]/node_modules/twilio/lib/webhooks.js: Unable to find this module in its module map or any of the node_modules directories under /Users/node_modules/crypto and its parent directories

ho provato a installare direttamente il pacchetto crypto e che non sembra funzionare.

Qualcuno ha riscontrato questo problema e ha un modo per risolverlo?

risposta

3

Sembra che React Native non accetti determinati pacchetti in base alle loro dipendenze, essendo Twilio uno di questi.

Pur non essendo una soluzione diretta, ho creato un problema con questo problema creando un server Express separato per effettuare la chiamata Twilio e chiamando tale route dall'app React Native.

2

Suggerisco di dare un'occhiata a there, molte soluzioni sono fornite perché nessuna sembra risolvere per tutti.

vi consiglio di provare la seguente (preso dal problema dal link):

  1. rm -rf node_modules
  2. rm -fr $TMPDIR/react-*
  3. watchman watch-del-all
  4. npm cache clean && npm install
  5. npm start from ./node_modules/react-native

Ma verificate il problema nella sua integralità, molti hanno trovato altre correzioni che hanno funzionato per loro.

+0

Grazie per questi suggerimenti! – Onaracs

10

È possibile utilizzare il modulo rn-nodeify per ottenere crypto in modalità nativa.

Aggiungi rn-nodeify al devDependencies in package.json:

"devDependencies": { 
    "rn-nodeify": "^6.0.1" 
} 

Aggiungere il seguente alla sezione scripts dello stesso file:

"scripts": { 
    … 
    "postinstall": "node_modules/.bin/rn-nodeify --install crypto --hack" 
} 

Essere consapevoli che rn-nodeify modificherà il tuo package.json .

Maggiori informazioni sono disponibili qui: https://www.npmjs.com/package/rn-nodeify

+0

Assicurati di aver letto anche la fonte di questo trucco -> Iirc rende il rng abbastanza insicuro, quindi devi essere ok con quello. – aegbert

+0

Per un'alternativa più pulita a rn-nodeify, vale a dire ReactNativify, vedere questa risposta: [Require unknown module "crypto" in ambiente react-native] (https://stackoverflow.com/a/45304528/8295283) –

0

Reagire confezionatore nativo utilizza Babel sotto il cofano. Ciò significa che è possibile utilizzare babel-plugin-rewrite-require Babel plugin per riscrivere tutte le chiamate require('crypto') a require('crypto-browserify'), presupponendo che quest'ultimo sia installato nel proprio node_modules.

A partire da gennaio 2016, è possibile utilizzare il file .babelrc per definire la configurazione opzionale, quindi diventa molto semplice.In primo luogo, installare le dipendenze:

npm install --save crypto-browserify 
npm install --save-dev babel-plugin-rewrite-require 

Quindi aggiungere plug-config al file .babelrc:

{ 
    "presets": ["react-native"], 
    "plugins": [ 
    ["babel-plugin-rewrite-require", { 
     aliases: { 
     crypto: 'crypto-browserify' 
     } 
    }] 
    ] 
} 

Riavviare il confezionatore e che dovrebbe essere esso.

Questo è lo stesso approccio utilizzato da ReactNativify, eccetto che qui si utilizza .babelrc invece di definire il trasformatore personalizzato. Quando è stato scritto ReactNativify, non era supportato, quindi dovevano andare con una soluzione più complessa. Vedere this file from ReactNativify per l'elenco quasi completo di polyfill del nodo.