【问题标题】:Twilio React Native - Unable to resolve module cryptoTwilio React Native - 无法解析模块加密
【发布时间】:2016-07-24 17:35:09
【问题描述】:

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

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

【问题讨论】:

    标签: react-native twilio node-modules


    【解决方案1】:

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

    package.json 中将rn-nodeify 添加到您的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

    【讨论】:

    【解决方案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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        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 使用的方法相同,只是这里我们使用.babelrc 而不是定义自定义转换器。 ReactNativify 写的时候不支持,所以他们不得不采用更复杂的解决方案。请参阅 this file from ReactNativify 了解几乎完整的节点 polyfill 列表。

        【讨论】:

          猜你喜欢
          • 2022-01-16
          • 2017-10-11
          • 2016-03-23
          • 1970-01-01
          • 2018-11-18
          • 1970-01-01
          • 2020-04-15
          • 2020-03-02
          • 2016-12-27
          相关资源
          最近更新 更多