How does NPM handle version conflicts?

All the dependencies and the internal dependencies tries to get a place in the root of the node_modules unless there is a conflict with the same dependency, but different version. When a conflict raises, it creates a sub node_modules under each dependency needed and pushes conflicting internal libraries in it.

EXAMPLE: Here, "A" internally depends on "[email protected]" and "B" depends on "[email protected]". When you execute install A and B like below:

npm install A
npm install B

node_modules
|_ A
|_ alpha @v1.0
|_ B
|    |_ node_modules
|        |_ alpha @v2.0
|_ ...

NOTE: Another node_modules created under "B" inside the main node_module.

For more details: visit this post.