This question already has an answer here:
I have a few "global" dependencies (jshint, csslint, buster, etc..) that I'd like to have automatically installed and executable via the command line when my package is installed via npm install
. Is this possible?
Currently, I'm doing the following manually:
npm install -g <package_name>
- from within my project:
npm link <package_name>
Update:
Just came across this feature request for npm. It seems like the scripts
config within package.json is the way to go?
Update Again: Or, after reading the npm docs, maybe I'm supposed to use a .gyp file? I'm confused.
I really like the pattern where you install local dependencies, then use a bash script that sets your PATH to
./node_modules/.bin
.File: env.sh
Then, you can use this script before any bash command. If you pair that with a Makefile or npm script:
File: Makefile
File: package.json
This tasks in these files look like they reference csslint in some global location, but they actually use the version in your node_modules bin.
The really awesome benefit of this is that these dependencies can be versioned easily, just like your other node modules. If you stick with a global install solution, you could be clobbering some specific version on the user's system that is required for one of their other projects.
It's not possible to specify dependencies as "global" from a
package.json
. And, this is by design as Isaac states in that feature request you referenced:But, "binaries" can still be used when a package is installed locally. They'll be in
.../node_modules/.bin/
. And, you should be able to queue them up with apreinstall
script.Though, if the series of commands is rather lengthy (as "jshint, csslint, buster, etc.." would suggest), you may want to look into using a build tool such as
grunt
to perform the various tasks:You should try this: https://github.com/lastboy/package-script
I've been using it to install global npm packages straight from the package.json. It works well for clients who aren't technically literate.
It even checks if the packages are already installed, if not install them!