Twilio React Native - 无法解析模块加密

Twilio React Native - Unable to resolve module crypto

我正在努力将 twilio 包实施到我的 react-native 项目中,当我在我的文件中需要它时,项目不会加载,我看到以下错误:

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 软件包,但似乎也不起作用。

有没有人遇到过这个问题,并且有办法解决它?

我建议你看看there,给出了很多解决方案,因为none似乎适合所有人。

我建议您尝试以下方法(摘自 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

但检查问题的完整性,许多人发现了其他适用于他们的修复程序。

似乎 React Native 不接受基于依赖项的某些包,Twilio 就是其中之一。

虽然不是直接的解决方案,但我创建了一个解决此问题的方法,方法是创建一个单独的 Express 服务器来进行 Twilio 调用,并从我的 React Native 应用程序中调用该路由。

您可以使用 rn-nodeify 模块在 react-native 上获得 crypto

rn-nodeify 添加到 package.json 中的 devDependencies:

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

将以下内容添加到同一文件的 scripts 部分:

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

请注意,rn-nodeify 会修改您的 package.json。

此处提供更多信息:https://www.npmjs.com/package/rn-nodeify

React Native 打包器在后台使用 Babel。这意味着您可以使用 babel-plugin-rewrite-require Babel plugin 将所有 require('crypto') 调用重写为 require('crypto-browserify'),假设后者已安装在您的 node_modules.

自 2016 年 1 月起,您可以使用 .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'
      }
    }]
  ]
}

重新启动打包程序,应该就可以了。

这与 ReactNativify uses, except that here we use .babelrc instead of defining custom transformer. When ReactNativify was written, it was not supported, so they had to go with more complex solution. See this file from ReactNativify 几乎完整的节点 polyfill 列表的方法相同。