Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how can I force npm 3 to install nested dependencies?

I just upgraded to npm version 3 and noticed one of the biggest changes it made is that it enforces a flat dependency tree.

Your dependencies will now be installed maximally flat. Insofar as is possible, all of your dependencies, and their dependencies, and THEIR dependencies will be installed in your project's node_modules folder with no nesting. You'll only see modules nested underneath one another when two (or more) modules have conflicting dependencies.

So for example if package A is dependent on package B, when you npm install A you will get this file structure:

--- root/
 |--- node_modules/
   |--- A/
   |--- B/

instead of the old file structure from version 2 or lower:

--- root/
 |--- node_modules/
   |--- A/
     |--- node_modules/
       |--- B/

The first (and I’m sure not the last) problem I ran into was this:

Package A isn’t aware of npm v3’s behavior and is dependent on package B. But A assumes the old (v2) file structure because it has node_modules/B in its code, instead of the proper ../node_modules/B. Now the code from A won’t compile because it’s looking for B/ in the wrong directory.

If I don’t feel like nagging the developer to fix the code and waiting for an update of A, I wonder if there’s a way I can set an option that will force npm to install A’s dependencies inside its own node_modules folder, the same way npm v2 would have done it.

like image 960
chharvey Avatar asked Oct 24 '15 17:10

chharvey


People also ask

How do I force an NPM package to install?

The -f or --force argument will force npm to fetch remote resources even if a local copy exists on disk. The -g or --global argument will cause npm to install the package globally rather than locally.

How do I automatically install npm dependencies?

to install the dependencies automatically , first of all list them manually in package. json file and run the npm install (sometimes sudo npm install ) command.


2 Answers

Have you tried --legacy-bundling for npm install?

https://docs.npmjs.com/cli/install

The --legacy-bundling argument will cause npm to install the package such that versions of npm prior to 1.4, such as the one included with node 0.8, can install the package. This eliminates all automatic deduping.

like image 93
Konstantin A. Magg Avatar answered Sep 21 '22 08:09

Konstantin A. Magg


This is what happens when I don’t get enough sleep. The obvious solution somehow escaped me.

$ cd node_modules/A/
$ npm install
$ cd ../../
like image 27
chharvey Avatar answered Sep 22 '22 08:09

chharvey