Hyperinstall is a program that runs yarn
or npm install
in multiple directories. Most companies have several npm packages in a project. Whenever you update your local copy of the code, you need to run npm install
in case any of these packages has different dependencies since the last time you ran npm install
. Hyperinstall automates and accelerates this with one command.
$ ./npm-hyperinstall
Package "a" has been updated; installing...
...
Finished installing "a"
Package "b" has been updated; installing...
...
Finished installing "b"
Updated 2 packages:
a
b
$ time ./npm-hyperinstall
real 0m0.232s
user 0m0.206s
sys 0m0.032s
The only prerequisite is Node.js 4.0 or newer. The best way to install Node.js is with nvm.
- Install Hyperinstall globally:
npm install -g hyperinstall
. Now thehyperinstall
command is in your path. Everyone on your team must do this. - Run
hyperinstall init
in the root directory of your project, or wherever your project scripts are stored. Make sure this is a directory that is under version control and is shared with your teammates. Hyperinstall creates two files: hyperinstall.json and npm-hyperinstall. - hyperinstall.json is a configuration file containing a JSON object.
-
The keys of the object are paths to npm packages in which you want Hyperinstall to run
npm install
. Both absolute and relative paths are supported; relative paths are resolved relative to hyperinstall.json. -
The values of the object are cache breakers. Start with 0 and bump it to 1, 2, 3, etc. if you need to force Hyperinstall to run
npm install
in the respective package. This usually isn't necessary since Hyperinstall tracks whether each package's dependencies have changed since the last time it ran, but the cache breakers serve as an escape hatch if necessary. -
For example, if your repository were to look like this:
. ├── hyperinstall.json ├── npm-hyperinstall ├── server │ ├── index.js │ ├── node_modules │ └── package.json └── website ├── index.js ├── node_modules └── package.json
Then to run
npm install
in your server and website packages, hyperinstall.json should look like this:{ "server": 0, "website": 0 }
- npm-hyperinstall is a script that runs
yarn
ornpm install
in each of your npm packages and can be run from anywhere. It is a shortcut forcd your/project/root && hyperinstall install
. - Add
/.hyperinstall-state.json
to your .gitignore file. This file is created by npm-hyperinstall and records the dependencies that are installed in each npm package. - After testing Hyperinstall (see the Usage section), commit hyperinstall.json, npm-hyperinstall, and .gitignore to your repository.
Run npm-hyperinstall. It will run yarn
or npm install
in each of your npm packages and create a file called .hyperinstall-state.json
that records the dependencies that were installed.
The next time you run npm-hyperinstall, it will check if any of the packages' dependencies have changed since the last time you ran Hyperinstall. It will run npm install
in each package with different dependencies. When the dependencies haven't changed at all, Hyperinstall is very fast and exits quickly.
To locally force Hyperinstall to reinstall all of your npm packages, run it with -f
(short for --force
). Hyperinstall will first delete each package's node_modules directory before running npm install
in each one.
Contributions are welcome. We're most interested in improving the workflow so feedback in that vein is especially interesting to us. Also bug fixes are appreciated. We might be more selective with diffs that add a fair bit of complexity since we generally want Hyperinstall to be a simple script on top of yarn
and npm install
.