Package Exports
- npminstall
 - npminstall/bin/install
 - npminstall/bin/install.js
 - npminstall/lib/utils
 - npminstall/package.json
 
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (npminstall) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
npminstall
Let npm install fast and easy.
Use as Cli
Install
$ npm install npminstall --gUsage
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
  --ignore-scripts: ignore all preinstall / install and postinstall scripts during the installationUse as Lib
Install
$ npm install npminstall --saveUsage
const co = require('co');
const npminstall = require('npminstall');
co(function*() {
  yield npminstall({
    // install root dir
    root: process.cwd(),
    // optional packages need to install, default is package.json's dependencies and devDependencies
    // pkgs: [
    //   { name: 'foo', version: '~1.0.0' },
    // ],
    // install to specific directory, default to root
    // targetDir: '/home/admin/.global/lib',
    // link bin to specific directory (for global install)
    // binDir: '/home/admin/.global/bin',
    // registry, default is https://registry.npmjs.org
    // registry: 'https://registry.npmjs.org',
    // debug: false,
    // storeDir: root + '.npminstall',
    // ignoreScripts: true, // ignore pre/post install scripts, default is `false`
  });
}).catch(function(err) {
  console.error(err.stack);
});Support Features
-  all types of npm package
-  a) a folder containing a program described by a package.json file (
npm install file:eslint-rule) -  b) a gzipped tarball containing (a) (
npm install ./rule.tgz) -  c) a url that resolves to (b) (
npm install https://github.com/indexzero/forever/tarball/v0.5.6) -  d) a 
@ that is published on the registry with (c)  -  e) a 
@ (see npm-dist-tag) that points to (d)  -  f) a 
that has a "latest" tag satisfying (e)  -  g) a 
that resolves to (a) ( npm install git://github.com/timaschew/cogent#fix-redirects) 
 -  a) a folder containing a program described by a package.json file (
 - All platform support
 -  global install (
-g, --global) -  
preinstall,install,postinstallscripts -  node-gyp
- node-pre-gyp
 
 - bin (yo@1.6.0, fsevents@1.0.6)
 - scoped package
 - bundleDependencies / bundledDependencies (node-pre-gyp@0.6.19, fsevents@1.0.6)
 - optionalDependencies (pm2@1.0.0)
 - peerDependencies (co-defer@1.0.0, co-mocha@1.1.2, estraverse-fb@1.3.1)
 - deprecate message
 -  
--productionmode -  
save,save-dev,save-optional -  support 
ignore-scripts 
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).
 npminstallwill 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'snode_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/debugdebug@2.2.0 is root package, won't create link at app/node_modules/.npminstall/node_modules/debug@.
Benchmarks
cnpmjs.org install
| 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.913spnpm i babel-preset-es2015 browserify chalk debug minimist mkdirp
    real	0m12.998s      user	0m8.653s       sys	0m3.362snpm i babel-preset-es2015 browserify chalk debug minimist mkdirp
    real	1m4.729s       user	0m55.589s      sys	0m23.135s