Scenario
If you develop a module but have local dependencies, which have been published to npm registry. If you want to use them like other published node modules. For examples, use require('local_module')
, declaring dependencies in app using the module name as it’s published. Besides, the changes in the dependent module will reflect instantly to the app without reinstallation. Then npm link
comes to solve the problem.
Description
Package linking is a two-step process. First npm link
in a package folder will create a symlink in the global folder {prefix}/node_modules/<package>
that links to the package where the npm link
command was executed. (prefix
is set in npm config
). It will also link any bins in the package to {prefix}/bin/{name}
. Next, in some other location, npm link package_name
will create a symbolic link from globally-installed package_name
to node_modules
of the current folder. (package_name
is taken from package.json
, not from the directory name). The package_name
can be optionally prefixed with a scope. The scope must be preceded by an @ symbol and followed by a slash.
For example.
cd ~/projects/node-redis # go into the package directory
npm link # creates global link
cd ~/projects/node-bloggy # go into some other package directory.
npm link redis # link-install the package
Any changes to ~/projects/node-redis
will be reflected in ~/projects/node-bloggy/node_modules/node-redis/
.
You could also use the shortcut:
cd ~/projects/node-bloggy # go into the dir of your main project
npm link ../node-redis # link the dir of your dependency
It works the same. And if the linked package is scoped, the link command must include that scope.
npm link @myorg/privatepackage