I want to do something like this, so npm install
also installs the package.json
of ../somelocallib
or more importantly its dependencies.
"dependencies": { "express": "*", "../somelocallib": "*" }
I want to do something like this, so npm install
also installs the package.json
of ../somelocallib
or more importantly its dependencies.
"dependencies": { "express": "*", "../somelocallib": "*" }
This feature was implemented in the version 2.0.0 of npm. Example:
{ "name": "baz", "dependencies": { "bar": "file:../foo/bar" } }
Any of the following paths are also valid:
../foo/bar ~/foo/bar ./foo/bar /foo/bar
The local package will be copied to the prefix (./node-modules
).
Put somelocallib
as dependency in your package.json
as normal:
"dependencies": { "somelocallib": "0.0.x" }
Then run npm link ../somelocallib
and npm will install the version you're working on as a symlink.
app@0.0.1 /private/tmp/app └―― somelocallib@0.0.1 -> /private/tmp/somelocallib
Reference: link(1)
It is now possible to specify local Node module installation paths in your package.json
directly. From the docs:
Local Paths
As of version 2.0.0 you can provide a path to a local directory that contains a package. Local paths can be saved using
npm install -S
ornpm install --save
, using any of these forms:../foo/bar ~/foo/bar ./foo/bar /foo/bar
in which case they will be normalized to a relative path and added to your
package.json
. For example:{ "name": "baz", "dependencies": { "bar": "file:../foo/bar" } }
This feature is helpful for local offline development and creating tests that require npm installing where you don't want to hit an external server, but should not be used when publishing packages to the public registry.
This works for me.
Place the following in your package.json file
"scripts": { "preinstall": "npm install ../my-own-module/" }
If you want to further automate this, because you are checking your module into version control, and don't want to rely upon devs remembering to npm link, you can add this to your package.json "scripts" section:
"scripts": { "postinstall": "npm link ../somelocallib", "postupdate": "npm link ../somelocallib" }
This feels beyond hacky, but it seems to "work". Got the tip from this npm issue: https://github.com/isaacs/npm/issues/1558#issuecomment-12444454
This is how you will add local dependencies:
npm install file:src/assets/js/FILE_NAME
Add it to package.json from NPM:
npm install --save file:src/assets/js/FILE_NAME
Directly add to package.json like this:
.... "angular2-autosize": "1.0.1", "angular2-text-mask": "8.0.2", "animate.css": "3.5.2", "LIBRARY_NAME": "file:src/assets/js/FILE_NAME" ....
Actually, as of npm 2.0, there is support now local paths (see here).
I know that npm install ../somelocallib
works.
However, I don't know whether or not the syntax you show in the question will work from package.json
...
Unfortunately, doc seems to only mention URL as a dependency.
Try file:///.../...tar.gz
, pointing to a zipped local lib... and tell us if it works.
This worked for me: first, make sure the npm directories have the right user
sudo chown -R myuser ~/.npm sudo chown -R myuser /usr/local/lib/node_modules
Then your in your package.json link the directory
"scripts": { "preinstall": "npm ln mylib ../../path/to/mylib" }, "dependencies": { "mylib" : "*" }
Curious.....at least on Windows (my npm is 3.something) I needed to do:
"dependencies": { "body-parser": "^1.17.1", "module1": "../module1", "module2": "../module2",
When I did an npm install ../module1 --save
it resulted in absolute paths and not relative per the documentation.
I messed around a little more and determined that ../xxx
was sufficient.
Specifically, I have the local node modules checked out to say d:\build\module1, d:\build\module2 and my node project (application) in d:\build\nodeApp.
To 'install', I:
d:\build\module1> rmdir "./node_modules" /q /s && npm install d:\build\module2> rmdir "./node_modules" /q /s && npm install d:\build\nodeApp> rmdir "./node_modules" /q /s && npm install
module1's package.json has a dependency of "module2": "../module2"; module2 has no local dependency; nodeApp has dependencies "module1": "../module1" and "module2": "../module2".
Not sure if this only works for me since all 3 folders (module1, module2 and nodeApp) sit on that same level.......
Two steps for a complete local development: