This package provides React Native compatible implementations of Node core modules like stream
and http
. This is a fork of node-libs-browser with a few packages swapped to be compatible in React Native.
This module has peerDependency "react", "react-native", "@react-native-module/pbkdf2"
npm install --save @react-native-module/node-libs-react-native @react-native-module/pbkdf2
yarn add @react-native-module/node-libs-react-native @react-native-module/pbkdf2
This package exports a mapping of absolute paths to each module implementation, keyed by module name. Modules without React Native compatible implementations are null
.
These modules can be used with React Native Packager's metro.config.js
or Webpack's resolve.alias
.
Add a metro.config.js
file in the root directory of your React Native project and set resolver.extraNodeModules
:
// metro.config.js
module.exports = {
resolver: {
extraNodeModules: require("@react-native-module/node-libs-react-native"),
},
};
For more information, see this post on Node core modules in React Native.
Some package not in extraNodeModules, but react-native's runtime run much slow or cannot
pbkdf2 is so slow in react-native's runtime randombytes is complain "Error: Secure random number generation is not supported by this browser. \nUse Chrome, Firefox or Internet Explorer 11"
If you wanna solve this Issue follow Steps
- Install babel-plugin-module-resolver
npm install --save-dev babel-plugin-module-resolver
yarn add -D babel-plugin-module-resolver
- Edit babel.config.js
// add lines
const nativeAlias = require('@react-native-module/node-libs-react-native/babelResolvers')
const nativePlugins = [
[
require.resolve('babel-plugin-module-resolver'),
{
alias: {
...nativeAlias
},
},
]
]
// add plugins to env (If you are not env, just add plugins)
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
env: {
production: {
plugins: [...nativePlugins, 'react-native-paper/babel'],
},
development: {
plugins: [...nativePlugins]
},
web: {
plugins: [...myWebPlugins]
}
},
...
}
- And Just Run it
Node has certain globals that modules may expect, such as Buffer
or process
. React Native does not provide these globals. The @react-native-module/node-libs-react-native/globals
module in this package will shim the global environment to add these globals. Just require (or import) this module in your app before anything else.
require("@react-native-module/node-libs-react-native/globals");
// ...
require("./app.js");
The following are the module implementations provided by this package. Some modules also have a "mock" implementation provided in the mock
directory. These are replacements with minimal functionality.
Module | RN-compatible | Mock |
---|---|---|
assert | defunctzombie/commonjs-assert | --- |
buffer | feross/buffer | buffer.js |
child_process | --- | --- |
cluster | --- | --- |
console | Raynos/console-browserify | console.js |
constants | juliangruber/constants-browserify | --- |
crypto | mvayngrib/react-native-crypto | --- |
dgram | --- | --- |
dns | --- | dns.js |
domain | bevry/domain-browser | --- |
events | Gozala/events | --- |
fs | --- | --- |
http | jhiesey/stream-http | --- |
https | substack/https-browserify | --- |
module | --- | --- |
net | --- | net.js |
os | CoderPuppy/os-browserify | --- |
path | substack/path-browserify | --- |
process | shtylman/node-process | process.js |
punycode | bestiejs/punycode.js | --- |
querystring | mike-spainhower/querystring | --- |
readline | --- | --- |
repl | --- | --- |
stream | nodejs/readable-stream | --- |
string_decoder | rvagg/string_decoder | --- |
sys | defunctzombie/node-util | --- |
timers | jryans/timers-browserify | --- |
tls | --- | tls.js |
tty | substack/tty-browserify | tty.js |
url | defunctzombie/node-url | --- |
util | defunctzombie/node-util | --- |
vm | --- | vm.js |
zlib | devongovett/browserify-zlib | --- |
These are other React Native packages that implement Node core related modules. They are not included in node-libs-react-native, but you may find them useful separately.
react-native-udp implements Node's dgram
API, but is not included
here due to its native implementation and need to use react-native link
.
react-native-fs implement's Node's fs
API, but is not included
here due to its native implementation and need to use react-native link
.
react-native-level-fs provides an alternative pure JavaScript implementation, using AsyncStorage as the underlying storage mechanism.
react-native-tcp implement's Node's net
API, but is not included
here due to its native implementation and need to use react-native link
.
This is a fork of node-libs-browser with minor modifications and packages swapped out for React Native implementations. Thanks to those package authors for doing the hard work.
MIT