Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

How do I override nested NPM dependency versions?

How do I override nested NPM dependency versions?


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?).
Problem courtesy of: georgebrock


You've probably found a workaround for this already.

Anyway, 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": "[email protected]~2.7.3"

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


Solution courtesy of: tuxpiper


View additional discussion.

This post first appeared on Node.js Recipes, please read the originial post: here

Share the post

How do I override nested NPM dependency versions?


Subscribe to Node.js Recipes

Get updates delivered right to your inbox!

Thank you for your subscription