Proper mechanism to downgrade react-native

2019-02-11 19:59发布

问题:

My situation is this :

I had a working copy of a react-native project that was working well. Had it commited to my git repository.

I decided to upgrade react-native to 0.26.3 and then 0.28 and finally ended up in a big dependency mess with collisions. So decided to go back to previous working version. Reverted the changes. Removed node_modules folder from my working directory.

But now npm install just won't work.

My working dependencies in package.json

  "dependencies": {
    "immutable": "^3.8.1",
    "key-mirror": "^1.0.1",
    "react": "^15.0.2",
    "react-native": "^0.26.0",
    "react-native-router-flux": "^3.26.1",
    "react-redux": "^4.4.5",
    "redux": "^3.5.2",
    "redux-thunk": "^2.1.0",
    "strformat": "0.0.7"
  },
  "devDependencies": {
    "babel-core": "^6.10.4",
    "babel-jest": "^12.1.0",
    "babel-preset-es2015": "^6.9.0",
    "babel-preset-react-native": "^1.9.0",
    "babel-register": "^6.9.0",
    "chai": "^3.5.0",
    "fetch-mock": "^4.5.4",
    "jest-cli": "^12.1.1",
    "mocha": "^2.5.3",
    "mockery": "^1.7.0",
    "nock": "^8.0.0",
    "redux-mock-store": "^1.1.1",
    "sinon": "^1.17.4",
    "sinon-chai": "^2.8.0",
    "sinon-stub-promise": "^2.0.0"
  }

Now I get

npm ERR! peerinvalid The package react@15.1.0 does not satisfy its siblings' peerDependencies requirements!
npm ERR! peerinvalid Peer react-native@0.26.3 wants react@15.0.2
npm ERR! peerinvalid Peer react-redux@4.4.5 wants react@^0.14.0 || ^15.0.0-0

This just not makes sense to me, as my react dependency is 15.0.2 and react-native 0.26.0 as you can see in package.json.

Note that this is from a previous commit that was working (the whole lot). I also did a npm ls. Weirdly wrong dependencies are shown in the tree like wrong versions of react-native, react-native-router-flux, react.

link to ls output

回答1:

Please update your react dependency in package.json to explicitly be 15.0.2, not ^15.0.2 since the latter resolves to 15.1.0 which causes this issue. It is recommended to leave it that way until you upgrade for the next time and get this error once again (to avoid react changing its version in the meantime and react-native not being ready for it).

Also, with npm3 EPEERINVALID is no longer an error, but warning.



回答2:

For existing projects if you want to install/downgrade to lower version

npm install react-native@x.x.x  ex: npm install react-native@0.43.4

This will install the version specified.

Check the installed version react-native -version



回答3:

Try npm prune and then npm i again.

The command npm prune will basically remove all unwanted packages, and npm i will make sure all missing packages are installed.



回答4:

Update 2018

Just run

npm install react-native@0.43.8

Replace 0.43.8 with version you need.



回答5:

Downgrading React Native requires manual steps. I recommend using RN-DIFF repo https://github.com/ncuillery/rn-diff . here are my steps

  1. Find the version you want to downgrade to in RN-DIFF, click on compare view then update your package.json to have react-native and react to match the same version in RN-DIFF=>package.json. here's an example
  2. Revert all the changes made to files as displayed in RN-Diff compare view minor updates (You can ignore the patches)
  3. Delete node_modules folder, clear watchman, reset metro cache, Clear ios cached files and Android cached file.
  4. yarn install

Note: If you're downgrading multiple minor versions down. For example from 0.56.0 to 0.54.4, then you should downgrade one version at a time. Downgrade to version 0.55.4 first, test that it works in iOS and Android then move on and downgrade to lower version



回答6:

If you're using react-native you can modify your package.json file with the versions that you need and then delete all your node modules rm -rf node_modules and then reinstall npm install