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]
该crypto模块是内置的Node模块; React Native在JavaScriptCore(在设备或模拟器上)和Chrome本身(使用Chrome调试时)运行JS,因此依赖于内置Node.js模块的模块将无法运行.有关详细信息,请参阅React Native文档的JavaScript Runtime部分.
我不确定将它集成到React Native应用程序有多难,但像Browserify这样的浏览器模块捆绑包通常具有核心Node.js模块的浏览器版本,就像这个crypto模块一样.
如果您按照 @emmby 的建议使用rn-nodeify,那么您可以使用react-native-crypto. 自述文件中的说明:
安装
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)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 次 |
| 最近记录: |