2016-04-05 2 views
6

Я работаю над реализацией пакета twilio в своем проекте, отвечающем за реакцию, и когда я требую его в своем файле, проект не загружается, и я вижу следующую ошибку:Twilio React Native - Невозможно разрешить модуль crypto

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

Я попытался установить crypto пакет непосредственно и что, кажется, не работает.

Неужели кто-нибудь испытал эту проблему и имеет способ ее решить?

ответ

3

Кажется, что React Native не принимает определенные пакеты на основе их зависимостей, Twilio является одним из них.

Не являясь прямым решением, я создал эту проблему, создав отдельный сервер Express, чтобы сделать вызов Twilio, и вызывая этот маршрут из моего приложения React Native.

2

Предлагаю вам посмотреть there, множество решений дано, потому что никто не исправляет для всех.

Я предлагаю вам попробовать следующее (взято из выпуска по ссылке):

  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

Но проверьте проблему в ее целостности, многие нашли другие исправления, которые сработали для них.

+0

Спасибо за эти предложения! – Onaracs

10

Вы можете использовать модуль rn-nodeify, чтобы получить crypto на основе реакции.

Добавить rn-nodeify к вашему devDependencies в package.json:

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

Добавьте следующий к scripts секции одного и того же файла:

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

Имейте в виду, что гп-nodeify изменит вашу package.json ,

Более подробная информация доступна здесь: https://www.npmjs.com/package/rn-nodeify

+0

Удостоверьтесь, что вы читаете источник этого взлома тоже -> Iirc это делает rng довольно неуверенным, поэтому вы должны быть в порядке с этим. – aegbert

+0

Для более чистой альтернативы rn-nodeify, а именно ReactNativify, см. Этот ответ: [Требуется неизвестный модуль «крипто» в средах с реакцией) (https://stackoverflow.com/a/45304528/8295283) –

0

Реагировать Native упаковщик использует Бабель под капотом. Это означает, что вы можете использовать babel-plugin-rewrite-require Babel plugin, чтобы переписать все звонки require('crypto') на номер require('crypto-browserify'), при условии, что последний установлен в вашем node_modules.

С января 2016 года вы можете использовать файл .babelrc для определения дополнительной конфигурации, поэтому это становится очень простым.Во-первых, установить зависимости:

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

Затем добавить плагины конфиг в файл .babelrc:

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

Restart упаковщик и что должно быть.

Это тот же подход, который использует ReactNativify, за исключением того, что здесь мы используем .babelrc вместо определения настраиваемого трансформатора. Когда было написано ReactNativify, оно не поддерживалось, поэтому им пришлось идти с более сложным решением. См. this file from ReactNativify для получения почти полного списка полиномов узлов.

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