Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I override nested NPM dependency versions?

Tags:

node.js

npm

I would like to use the grunt-contrib-jasmine NPM package. It has various dependencies. Part of the dependency graph looks like this:

─┬ [email protected]  │ ├─┬ [email protected]  │ │ ├─┬ [email protected] 

Unfortunately, there's a bug in this version phantomjs which prevents it from installing correctly on Mac OS X. This is fixed in the latest version.

How can I get grunt-lib-phantomjs to use a newer version of phantomjs?

Some additional context:

  • grunt-contrib-jasmine explicitly requires version "~0.2.0" of grunt-lib-phantomjs, which explicitly requires version "~1.8.1" of phantomjs.
  • Adding phantomjs to my package's dependencies first has no effect; both versions are installed and grunt-contrib-jasmine still uses the older versions (see: When installing a package with NPM, can you tell it to use a different version of one of its dependencies?).
like image 236
georgebrock Avatar asked Apr 04 '13 08:04

georgebrock


1 Answers

You can use npm shrinkwrap functionality, in order to override any dependency or sub-dependency.

I've just done this in a grunt project of ours. We needed a newer version of connect, since 2.7.3. was causing trouble for us. So I created a file named npm-shrinkwrap.json:

{   "dependencies": {     "grunt-contrib-connect": {       "version": "0.3.0",       "from": "[email protected]",       "dependencies": {         "connect": {           "version": "2.8.1",           "from": "connect@~2.7.3"         }       }     }   } } 

npm should automatically pick it up while doing the install for the project.

(See: https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/)

like image 133
tuxpiper Avatar answered Oct 09 '22 05:10

tuxpiper