Difference between `npm link x` and `npm install /path/to/x`
An article on Medium by Alex Mills lays it out bare.
It says the difference between npm link x
and npm install /local/path/to/x
are:
The big difference is that
npm install /local/path/x
will run the preinstall/postinstall hooks, butnpm link x
will not.npm link
uses the global NPM space,npm install /local/path/x
does not. npm link creates a symlink to x in the global space, and then when you call npm link x from y, it creates a symlink not directly to x, but rather to the global symlink. This is an important differences if you are using different global node.js versions, e.g., NVM.npm install /absolute/path/x
will alter package.json,npm link x
does not.
To get a fresh local copy instead of a symlink, use npm pack
, like so:
tgz="$PWD/$(npm pack)"
cd <other project>
npm install "$tgz"
You could also use cp/rsync, but that wouldn't run install hooks or put the executables in node_modules/.bin
...that will work.
npm link
npm link
npm link <folder>
Both of the above command will create a symlink of the <folder>
in the global packages.
Now npm link <folder>
will symlink the same in your node_modules
folder also for your current project. And these names would be based on project name in package.json
and not based on the folder name you are linking
The package.json
of your current project will not be touched or altered
The dependencies of the package will still be installed as you can see in the code here
https://github.com/nodejs/node/blob/31d5bdea70e44802918d6f4aa7c378bc1992be54/deps/npm/lib/link.js#L156
So to summarize:
- It creates a symlink in the global folder (always).
- It doesn't alter the
package.json
. - It does install any of missing dependencies.
npm install
Now npm install <folder>
is a bit different to this:
- It doesn't create a symlink in the global folder.
- It alters and adds the reference to
package.json
. - It creates a symlink to original folder.