npminstall
![npm download](https://img.shields.io/npm/dm/npminstall.svg?style=flat-square)
Let npm install
fast and easy.
Use as Cli
Install
$ npm install npminstall --g
Usage
Usage:
npminstall
npminstall <pkg>
npminstall <pkg>@<tag>
npminstall <pkg>@<version>
npminstall <pkg>@<version range>
npminstall <folder>
npminstall <tarball file>
npminstall <tarball url>
npminstall <git:// url>
npminstall <github username>/<github project>
Can specify one or more: npm install ./foo.tgz bar@stable /some/folder
If no argument is supplied, installs dependencies from ./package.json.
Options:
--production: won't install devDependencies
--save, --save-dev, --save-optional: save installed dependencies into package.json
-g, --global: install devDependencies to global directory which specified in '$ npm config get prefix'
-r, --registry: specify custom registry
-c, --china: specify in china, will automatically using chinses npm registry and other binary's mirrors
Use as Lib
Install
$ npm install npminstall --save
Usage
const co = require('co');
const npminstall = require('npminstall');
co(function*() {
yield npminstall({
root: process.cwd(),
});
}).catch(function(err) {
console.error(err.stack);
});
Support Features
Different with NPM
This project is inspired by pnpm, and has a similar store structure like pnpm. You can read pnpm vs npm to see the different with npm.
Limitations
- You can't install from shrinkwrap(and don't want to support for now).
- Peer dependencies are a little trickier to deal with(see rule 1 below).
- You can't publish npm modules with bundleDependencies managed by npminstall(because of rule 2 below).
npminstall
will collect all postinstall scripts, and execute them until all dependencies installed.- If last install failed, better to cleanup node_modules directory before retry.
node_modules
directory
Two rules:
- The latest version of modules will link at
options.storeDir
's node_modules
. - Module's dependencies will link at module's
node_modules
.
e.g.:
- app:
{ "dependencies": { "debug": "2.2.0" } }
(root) - debug@2.2.0:
{ "dependencies": { "ms": "0.7.1" } }
app/
├── package.json
└── node_modules/
├── .npminstall/
│ ├── debug/
│ │ └── 2.2.0/
│ │ └── debug
│ │ ├── package.json
│ │ └── node_modules/
│ │ └── ms -> ../../../../ms/0.7.1/ms
│ ├── ms/
│ │ └── 0.7.1/
│ │ └── ms
│ │ └── package.json
│ └── node_modules/
│ └── ms -> ../ms/0.7.1/ms
└── debug -> .npminstall/debug/2.2.0/debug
debug@2.2.0
is root package, won't create link at app/node_modules/.npminstall/node_modules/debug@
.
Benchmarks
cnpmjs.org install
- npminstall@1.2.0
- pnpm@0.18.0
- npm@2.14.12
cli | real | user | sys |
---|
npminstall | 0m10.908s | 0m8.733s | 0m4.282s |
npminstall with cache | 0m8.815s | 0m7.492s | 0m3.644s |
npminstall --no-cache | 0m10.279s | 0m8.255s | 0m3.932s |
pnpm | 0m13.509s | 0m11.650s | 0m4.443s |
npm | 0m28.171s | 0m26.085s | 0m8.219s |
npm with cache | 0m20.939s | 0m19.415s | 0m6.302s |
pnpm benchmark
see https://github.com/rstacruz/pnpm#benchmark
npminstall babel-preset-es2015 browserify chalk debug minimist mkdirp
real 0m8.929s user 0m5.606s sys 0m2.913s
pnpm i babel-preset-es2015 browserify chalk debug minimist mkdirp
real 0m12.998s user 0m8.653s sys 0m3.362s
npm i babel-preset-es2015 browserify chalk debug minimist mkdirp
real 1m4.729s user 0m55.589s sys 0m23.135s
License
MIT