在本地反应环境中需要未知模块"加密"

Sah*_*has 13 reactjs react-native

我正在使用react-native编写一个简单的Twitter应用程序.使用twit模块获取Twitter提要和流.下面是代码,它工作正常.但是,当包含在我的react-native应用程序中时,看到错误"需要未知模块"加密"".依赖性似乎是myapp-> twit-> oauth-> crypto(那是节点v0.12.2的一部分).有什么建议让这个在反应本地环境中工作吗?

var Twit = require('twit')
var T = new Twit({
    consumer_key:''
  , consumer_secret:''
  , access_token:''
  , access_token_secret:''
})
var filtered_tweets=[];
var error;
var isSuccess=false;

function getTweets(searchString){
    T.get('search/tweets',{q:searchString, count:100}, getResponse);
    }

function getResponse(err,data,response){
        if(err) { 
            handleGetErr(err); 
        }
        handleGetData(data.statuses);
    }

function handleGetErr(err){

    enter code here

    error = err;
    }

function handleGetData(data){
    data.map(function(tweet){
      var twit={
        twit:tweet.id,
        created_at:tweet.created_at,
        text:tweet.text,
        retweet_count:tweet.retweet_count,
        favorite_count:tweet.favorite_count
      };
      filtered_tweets.push(twit);
    });
    console.log(filtered_tweets);
    isSuccess=true;
}
getTweets("@sahaswaranamam");
module.exports = getTweets;
Run Code Online (Sandbox Code Playgroud)

![附] [2]

Mic*_*ley 9

该crypto模块是内置的Node模块; React Native在JavaScriptCore(在设备或模拟器上)和Chrome本身(使用Chrome调试时)运行JS,因此依赖于内置Node.js模块的模块将无法运行.有关详细信息,请参阅React Native文档的JavaScript Runtime部分.

我不确定将它集成到React Native应用程序有多难,但像Browserify这样的浏览器模块捆绑包通常具有核心Node.js模块的浏览器版本,就像这个crypto模块一样.


Arn*_*ver 5

如果您按照 @emmby 的建议使用rn-nodeify,那么您可以使用react-native-crypto. 自述文件中的说明:

  1. 安装

    npm i --save react-native-crypto
    # install peer deps
    npm i --save react-native-randombytes
    react-native link react-native-randombytes
    # install latest rn-nodeify
    npm i --save-dev mvayngrib/rn-nodeify
    # install node core shims and recursively hack package.json files
    # in ./node_modules to add/update the "browser"/"react-native"
    # field with relevant mappings
    ./node_modules/.bin/rn-nodeify --hack --install
    
    Run Code Online (Sandbox Code Playgroud)
  2. rn-nodeifyshim.js会在项目根目录下创建一个

    // index.ios.js or index.android.js
    // make sure you use `import` and not require!  
    import './shim.js'
    // ...the rest of your code
    
    Run Code Online (Sandbox Code Playgroud)

但rn-nodeify也指出:

如果您正在寻找更明智的方法,请查看ReactNativify。我自己没有测试过,但我认为philikon会很乐意提供帮助


使用 ReactNativify 创建一个rn-cli.config.js,然后在 a 中transformer.js让 Babel 使用以下命令转换包依赖项babel-plugin-rewrite-require:

// 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,
}]
Run Code Online (Sandbox Code Playgroud)

(注意:您也可以直接在没有这2个js文件的情况下执行此操作.babelrc)

(注 2:虽然 ReactNativify 是更干净的方法,但它仍然给我crypto.getRandomValues在 RN 中的生产使用方面带来问题。请参阅这个问题)


归档时间:

查看次数:

12546 次

最近记录:

7 年,12 月 前