Different versions of react and React native cause circular dependencies - node.js

I am having a question regarding version constraints.
First I was trying to install npm i react-native-message-bar --save
But then I got an Unmet Peer dependency: UNMET PEER DEPENDENCY react#16.1.0
So I did: npm install react#16.1.0
But then I got:
UNMET PEER DEPENDENCY react#16.1.0
npm WARN react-native#0.50.3 requires a peer of react#16.0.0 but none was installed.
So I have the feeling that I am running into circular dependencies.
Does this mean that I am not able to use the react-native-message-bar . with the current version of react?
I Would like to have some suggestions on how to resolve this.

Related

NPM warning node-fetch #2.6.7 Requires a peer of encoding#^0.1.0 but none was installed

NPM warning node-fetch #2.6.7
Requires a peer of encoding#^0.1.0 but none was installed.
peer dependency means that it need the library and you must install that dependency by yourself:
npm i encoding#0.1.0

eslint installation warnings. Need Clarification

In following a tutorial, I ran the following command to install eslint airbnb and a few dependencies
$ sudo npm install -g eslint-config-airbnb eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11y
Upon completion I received a number of warnings
npm WARN eslint-plugin-react#7.6.0 requires a peer of eslint#^3.0.0 || ^4.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN eslint-plugin-import#2.8.0 requires a peer of eslint#2.x - 4.x but none is installed. You must install peer dependencies yourself.
npm WARN eslint-configeslint-config-airbnb-airbnb#16.1.0 requires a peer of eslint#^4.9.0 but none is installed. You must install peer dependencies yourself.
npm WARN eslint-config-airbnb-base#12.1.0 requires a peer of eslint#^4.9.0 but none is installed. You must install peer dependencies yourself.
npm WARN eslint-plugin-jsx-a11y#6.0.3 requires a peer of eslint#^3 || ^4 but none is installed. You must install peer dependencies yourself.
Ok, so.... I'm beginning to think the tutorial is outdated and something has changed. What (if anything) am I missing?
Please advise.
Each node package has dependencies it works perfectly or has been tested with hence the warning you get since they are the ones that are recommended or declared in the packages configs . Hence the warnings. It is recommended to follow the required packages to avoid errors, but most of the time unless you get an error then you should be good to go as the the alluded to package itself at whatever version exists.
In your case confirm you have eslint in you package.json, if not run:
npm install eslint --save-dev
All the warning are about peer dependencies. They are categorised as WARN instead of ERROR, because if your application code never touch such a dependency, you will be good. Fully tested code can ensure that these warnings can be safely ignored.
Excellent explanation to peer dependency

Unmet dependency error when trying to install react-native-cli using npm

When I run
npm install -g react-native-cli
I see this error
npm WARN unmet dependency /usr/local/lib/node_modules/npm/node_modules/read-installed/node_modules/readdir-scoped-modules requires graceful-fs#'^4.1.2' but will load
npm WARN unmet dependency /usr/local/lib/node_modules/npm/node_modules/read-installed/node_modules/graceful-fs,
npm WARN unmet dependency which is version 3.0.8
I've tried updating graceful-fs by
npm update -g graceful-fs
Reacts website suggests using sudo if you have a permission error. This error doesn't seem permission related but if it is, I can certainly run sudo.
I'm an npm and node noob so please ask for any more info that will help.
I ran npm update -g and then was able to install the React CLI.

How to install npm peer dependencies automatically?

For example, when I install Angular2:
npm install --save angular2
temp#1.0.0 /Users/doug/Projects/dougludlow/temp
├── angular2#2.0.0-beta.3
├── UNMET PEER DEPENDENCY es6-promise#^3.0.2
├── UNMET PEER DEPENDENCY es6-shim#^0.33.3
├── UNMET PEER DEPENDENCY reflect-metadata#0.1.2
├── UNMET PEER DEPENDENCY rxjs#5.0.0-beta.0
└── UNMET PEER DEPENDENCY zone.js#0.5.11
npm WARN angular2#2.0.0-beta.3 requires a peer of es6-promise#^3.0.2 but none was installed.
npm WARN angular2#2.0.0-beta.3 requires a peer of es6-shim#^0.33.3 but none was installed.
npm WARN angular2#2.0.0-beta.3 requires a peer of reflect-metadata#0.1.2 but none was installed.
npm WARN angular2#2.0.0-beta.3 requires a peer of rxjs#5.0.0-beta.0 but none was installed.
npm WARN angular2#2.0.0-beta.3 requires a peer of zone.js#0.5.11 but none was installed.
Is there a magic flag that I can pass to npm that will install the peer dependencies as well? I haven't been able to find one... It's tedious to manually copy and paste the peer dependencies and make sure I have the correct versions.
In other words, I'd rather not have to do:
npm install --save angular2#2.0.0-beta.3 es6-promise#^3.0.2 es6-shim#^0.33.3 reflect-metadata#0.1.2 rxjs#5.0.0-beta.0 zone.js#0.5.11
What is the better way?
npm version 7 and newer
npm v7 has reintroduced the automatic peerDependencies installation. Now in V7, as in versions before V3, you only need to do an npm i and all peerDependences should be automatically installed.
They had made some changes to fix old problems as version compatibility across multiple dependants.
You can see the discussion and the announcement.
Older Answer
The automatic install of peer dependencies was explicitly removed with npm 3, as it cause more problems than it tried to solve. You can read about it here for example:
https://blog.npmjs.org/post/110924823920/npm-weekly-5
https://github.com/npm/npm/releases/tag/v3.0.0
So no, for the reasons given, you cannot install them automatically with npm 3 upwards.
I solved it by rewriting package.json with the exact values warnings were about.
Warnings when running npm:
npm WARN angular2#2.0.0-beta.3 requires a peer of es6-shim#^0.33.3 but none was installed.
npm WARN angular2#2.0.0-beta.3 requires a peer of reflect-metadata#0.1.2
In package.json, write
"es6-shim": "^0.33.3",
"reflect-metadata": "0.1.2",
Then, delete node_modules directory.
Finally, run the command below:
npm install
Cheat code helpful in this scenario and some others...
├── UNMET PEER DEPENDENCY #angular/common#4.0.2
├── UNMET PEER DEPENDENCY #angular/compiler#4.0.2
├── UNMET PEER DEPENDENCY #angular/compiler-cli#4.0.2
├── UNMET PEER DEPENDENCY #angular/core#4.0.2
├── UNMET PEER DEPENDENCY #angular/forms#4.0.2
├── UNMET PEER DEPENDENCY #angular/http#4.0.2
├── UNMET PEER DEPENDENCY #angular/platform-browser#4.0.2
├── UNMET PEER DEPENDENCY #angular/platform-browser-dynamic#4.0.2 >
copy & paste your error into your code editor.
Highlight an unwanted part with your curser. In this case ├── UNMET PEER DEPENDENCY
Press command + d a bunch of times.
Press delete twice. (Press space if you accidentally highlighted ├── UNMET PEER DEPENDENCY )
Press up once. Add npm install
Press down once. Add --save
Copy your stuff back into the cli and run
npm install #angular/common#4.0.2 #angular/compiler#4.0.2 #angular/compiler-cli#4.0.2 #angular/core#4.0.2 #angular/forms#4.0.2 #angular/http#4.0.2 #angular/platform-browser#4.0.2 #angular/platform-browser-dynamic#4.0.2 --save
I experienced these errors when I was developing an npm package that had peerDependencies. I had to ensure that any peerDependencies were also listed as devDependencies. The project would not automatically use the globally installed packages.
The project npm-install-peers will detect peers and install them.
As of v1.0.1 it doesn't support writing back to the package.json automatically, which would essentially solve our need here.
Please add your support to issue in flight: https://github.com/spatie/npm-install-peers/issues/4
I was facing the same issue, lucky I found an alternative way to install peer dependencies along with the install command.
Step 1: $ npm i npm-install-peers -D
for more clarity about the plugin: https://www.npmjs.com/package/npm-install-peers
Step 2: Update package.json for magical script
....
"scripts": {
...
"postinstall": "npm-install-peers"
},
....
Step 3: Just need to hit the install command to get installed all plugins
$ npm install
Install yarn and then run:
yarn global add install-peerdeps

npm reports "requires (one version)' but will load (another version)"

Likely after cordove install with npm I got warning messages almost for every npm operations "requires colors#'>=0.6.0' but will load .. color"
D:\Workspaces\Enide-Studio-2014\OpenWith.js>npm i . -g
C:\Users\weibl\AppData\Roaming\npm\openwith -> C:\Users\weibl\AppData\Roaming\npm\node_modules\openwith\bin\openwith.js
npm WARN unmet dependency C:\Users\weibl\AppData\Roaming\npm\node_modules\phonegap\node_modules\cordova requires colors#'>=0.6.0' but will load
npm WARN unmet dependency C:\Users\weibl\AppData\Roaming\npm\node_modules\phonegap\node_modules\colors,
npm WARN unmet dependency which is version 0.6.0-1
npm WARN unmet dependency C:\Users\weibl\AppData\Roaming\npm\node_modules\phonegap\node_modules\node-static requires colors#'>=0.6.0' but will load
npm WARN unmet dependency C:\Users\weibl\AppData\Roaming\npm\node_modules\phonegap\node_modules\colors,
npm WARN unmet dependency which is version 0.6.0-1
openwith#0.11.0 C:\Users\weibl\AppData\Roaming\npm\node_modules\openwith
How to fix such npm errors?
As Andrew hinted, solution was to
npm -g update colors
Clean out the node-Modules folder and re-run:
npm install
At first, delete the phonegap\ folder in the location C:\Users\weibl\AppData\Roaming\npm\node_modules\. Of course, specific location will be different for others.
Then, proceed for any npm install/update command you want.

Resources