{"id":13526885,"url":"https://github.com/cnpm/npminstall","last_synced_at":"2025-05-15T12:05:23.350Z","repository":{"id":39801223,"uuid":"50849377","full_name":"cnpm/npminstall","owner":"cnpm","description":"Make `npm install` fast and easy.","archived":false,"fork":false,"pushed_at":"2024-06-10T00:56:29.000Z","size":1487,"stargazers_count":500,"open_issues_count":12,"forks_count":60,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-05-10T08:34:28.229Z","etag":null,"topics":["ied","npm","npm-like","package-manager","pnpm","yarn"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cnpm.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-02-01T15:39:58.000Z","updated_at":"2025-03-25T07:50:05.000Z","dependencies_parsed_at":"2022-07-17T04:00:46.061Z","dependency_job_id":"2f5586da-b870-47f8-a9ad-6618183608e2","html_url":"https://github.com/cnpm/npminstall","commit_stats":{"total_commits":610,"total_committers":39,"mean_commits":15.64102564102564,"dds":0.680327868852459,"last_synced_commit":"4c6946e9e9b817d9f37c9931ca65a6daacff3417"},"previous_names":[],"tags_count":257,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnpm%2Fnpminstall","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnpm%2Fnpminstall/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnpm%2Fnpminstall/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnpm%2Fnpminstall/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cnpm","download_url":"https://codeload.github.com/cnpm/npminstall/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254337613,"owners_count":22054253,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ied","npm","npm-like","package-manager","pnpm","yarn"],"created_at":"2024-08-01T06:01:36.745Z","updated_at":"2025-05-15T12:05:18.335Z","avatar_url":"https://github.com/cnpm.png","language":"JavaScript","readme":"# npminstall\n\n[![NPM version][npm-image]][npm-url]\n[![Node CI](https://github.com/cnpm/npminstall/actions/workflows/ci.yml/badge.svg)](https://github.com/cnpm/npminstall/actions/workflows/ci.yml)\n[![Test coverage][codecov-image]][codecov-url]\n[![Known Vulnerabilities][snyk-image]][snyk-url]\n[![npm download][download-image]][download-url]\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fcnpm%2Fnpminstall.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fcnpm%2Fnpminstall?ref=badge_shield)\n\n[npm-image]: https://img.shields.io/npm/v/npminstall.svg?style=flat-square\n[npm-url]: https://npmjs.org/package/npminstall\n[codecov-image]: https://codecov.io/gh/cnpm/npminstall/branch/master/graph/badge.svg\n[codecov-url]: https://codecov.io/gh/cnpm/npminstall\n[snyk-image]: https://snyk.io/test/npm/npminstall/badge.svg?style=flat-square\n[snyk-url]: https://snyk.io/test/npm/npminstall\n[download-image]: https://img.shields.io/npm/dm/npminstall.svg?style=flat-square\n[download-url]: https://npmjs.org/package/npminstall\n\nMake `npm install` fast and handy.\n\n## Node.js and Python required\n\n- Node.js \u003e= 14.x\n- Python \u003e= 3.x\n\n## Use as Cli\n\n### Install\n\n```bash\n$ npm install npminstall -g\n```\n\n### Usage\n\n#### In cnpm\n\nIt is integrated in [cnpm](https://github.com/cnpm/cnpm).\n\n```bash\n$ npm install cnpm -g\n# will use npminstall\n$ cnpm install\n```\n\n#### npminstall\n\n```bash\nUsage:\n\n  npminstall\n  npminstall \u003cpkg\u003e\n  npminstall \u003cpkg\u003e@\u003ctag\u003e\n  npminstall \u003cpkg\u003e@\u003cversion\u003e\n  npminstall \u003cpkg\u003e@\u003cversion range\u003e\n  npminstall \u003calias\u003e@npm:\u003cname\u003e\n  npminstall \u003cfolder\u003e\n  npminstall \u003ctarball file\u003e\n  npminstall \u003ctarball url\u003e\n  npminstall \u003cgit:// url\u003e\n  npminstall \u003cgithub username\u003e/\u003cgithub project\u003e\n\nCan specify one or more: npm install ./foo.tgz bar@stable /some/folder\nIf no argument is supplied, installs dependencies from ./package.json.\n\nOptions:\n\n  --production: won't install devDependencies\n  --save, --save-dev, --save-optional: save installed dependencies into package.json\n  -g, --global: install devDependencies to global directory which specified in `$ npm config get prefix`\n  -r, --registry: specify custom registry\n  -c, --china: specify in china, will automatically using chinese npm registry and other binary's mirrors\n  -d, --detail: show detail log of installation\n  --trace: show memory and cpu usages traces of installation\n  --ignore-scripts: ignore all preinstall / install and postinstall scripts during the installation\n  --no-optional: ignore optionalDependencies during the installation\n  --forbidden-licenses: forbit install packages which used these licenses\n  --engine-strict: refuse to install (or even consider installing) any package that claims to not be compatible with the current Node.js version.\n  --flatten: flatten dependencies by matching ancestors dependencies\n  --registry-only: make sure that all packages are installed from registry. Any package that is installed from remote(e.g.: git, remote url) will lead to a failure of installation.\n  --cache-strict: use disk cache even on production env\n```\n\n#### npmuninstall\n\n```bash\nUsage:\n\n  npmuninstall \u003cpkg\u003e\n  npmuninstall \u003cpkg\u003e@\u003cversion\u003e\n  npmuninstall \u003cpkg\u003e@\u003cversion\u003e [\u003cpkg\u003e@\u003cversion\u003e]\n  npminstall \u003calias\u003e@npm:\u003cname\u003e\n```\n\n#### npmlink\n\n```bash\nUsage:\n\n  npmlink \u003cfolder\u003e\n```\n\n## Use as Lib\n\n### Install\n\n```bash\n$ npm install npminstall --save\n```\n\n### Usage\n\n```js\nconst npminstall = require('npminstall');\n\n(async () =\u003e {\n  await npminstall({\n    // install root dir\n    root: process.cwd(),\n    // optional packages need to install, default is package.json's dependencies and devDependencies\n    // pkgs: [\n    //   { name: 'foo', version: '~1.0.0' },\n    // ],\n    // install to specific directory, default to root\n    // targetDir: '/home/admin/.global/lib',\n    // link bin to specific directory (for global install)\n    // binDir: '/home/admin/.global/bin',\n    // registry, default is https://registry.npmjs.org\n    // registry: 'https://registry.npmjs.org',\n    // debug: false,\n    // storeDir: root + 'node_modules',\n    // ignoreScripts: true, // ignore pre/post install scripts, default is `false`\n    // forbiddenLicenses: forbit install packages which used these licenses\n  });\n})().catch(err =\u003e {\n  console.error(err);\n});\n```\n\n## Support Features\n\n- [x] all types of npm package\n  - [x] a) a folder containing a program described by a package.json file (`npm install file:eslint-rule`)\n  - [x] b) a gzipped tarball containing (a) (`npm install ./rule.tgz`)\n  - [x] c) a url that resolves to (b) (`npm install https://github.com/indexzero/forever/tarball/v0.5.6`)\n  - [x] d) a \u003cname\u003e@\u003cversion\u003e that is published on the registry with (c)\n  - [x] e) a \u003cname\u003e@\u003ctag\u003e (see npm-dist-tag) that points to (d)\n  - [x] f) a \u003cname\u003e that has a \"latest\" tag satisfying (e)\n  - [x] g) a \u003cgit remote url\u003e that resolves to (a) (`npm install git://github.com/timaschew/cogent#fix-redirects`)\n- [x] All platform support\n- [x] global install (`-g, --global`)\n- [x] `preinstall`, `install`, `postinstall` scripts\n- [x] node-gyp@9, only support Python@3\n  - [x] node-pre-gyp\n- [x] bin (yo@1.6.0, fsevents@1.0.6)\n- [x] scoped package\n- [x] bundleDependencies / bundledDependencies (node-pre-gyp@0.6.19, fsevents@1.0.6)\n- [x] optionalDependencies (pm2@1.0.0)\n- [x] peerDependencies (co-defer@1.0.0, co-mocha@1.1.2, estraverse-fb@1.3.1)\n- [x] deprecate message\n- [x] `--production` mode\n- [x] `save`, `save-dev`, `save-optional`\n- [x] support `ignore-scripts`\n- [x] uninstall\n- [x] resolutions\n- [x] [npm alias](https://github.com/npm/rfcs/blob/latest/implemented/0001-package-aliases.md)\n- [x] [npm workspaces](https://docs.npmjs.com/cli/v9/using-npm/workspaces?v=true)\n\n## Different with NPM\n\nThis project is inspired by [pnpm](https://github.com/pnpm/pnpm), and has a similar store structure like pnpm. You can read [pnpm vs npm](https://github.com/pnpm/pnpm/blob/master/docs/pnpm-vs-npm.md) to see the different with npm.\n\n### Limitations\n\n- You can't install from [shrinkwrap](https://docs.npmjs.com/cli/shrinkwrap)(and don't want to support for now).\n- Peer dependencies are a little trickier to deal with(see rule 1 below).\n- You can't publish npm modules with bundleDependencies managed by npminstall(because of rule 2 below).\n- `npminstall` will collect all postinstall scripts, and execute them until all dependencies installed.\n- If last install failed, better to cleanup node_modules directory before retry.\n\n## `node_modules` directory\n\nTwo rules:\n\n1. The latest version of modules will link at `options.storeDir`'s `node_modules`.\n2. Module's dependencies will link at module's `node_modules`.\n\ne.g.:\n\n- app: `{ \"dependencies\": { \"debug\": \"2.2.0\" } }` (root)\n- debug@2.2.0: `{ \"dependencies\": { \"ms\": \"0.7.1\" } }`\n\n```bash\napp/\n├── package.json\n└── node_modules\n    ├── _debug@2.2.0@debug\n    │   ├── node_modules\n    │   │   └── ms -\u003e ../../_ms@0.7.1@ms\n    ├── _ms0.7.1@ms\n    ├── debug -\u003e _debug@2.2.0@debug\n    └── ms -\u003e _ms@0.7.1@ms # for peerDependencies\n```\n\n### flattened vs nested\n\nnpminstall will always try to install the maximal matched version of semver:\n\n```\nroot/\n  koa@1.1.0\n  mod/\n    koa@~1.1.0\n# will install two different version of koa when use npminstall.\n```\n\nyou can enable flatten mode by `--flatten` flag, in this mod, npminstall will try to use ancestors' dependencies to minimize the dependence-tree.\n\n```\nroot/\n  koa@1.1.0\n  mod/\n    koa@~1.1.0\n\nroot/\n  koa@1.1.0\n  mod/\n    koa@^1.1.0\n# both the same version: 1.1.0\n\nroot/\n  koa@~1.1.0\n  mod/\n    koa@^1.1.0\n# both the same version: 1.1.2\n\nroot/\n  mod/\n    koa@^1.1.0\n  moe/\n    koa@~1.1.0\n# two different versions\n```\n\n**npminstall will always treat `n.x` and `n.m.x` as flattened**\n\n```\nroot/\n  koa@1.1.0\n  mod/\n    koa@1.1.x\nboth the same version: 1.1.0\n\nroot/\n  koa@~1.1.0\n  mod/\n    koa@1.x\nboth the same version: 1.1.2\n```\n\n## Resolutions\n\nsupport [selective version resolutions](https://yarnpkg.com/en/docs/selective-version-resolutions) like yarn. which lets you define custom package versions inside your dependencies through the resolutions field in your `package.json` file.\n\nresolutions also supports [npm alias](https://docs.npmjs.com/cli/v7/commands/npm-install). It's a workaround feature to fix some archived/inactive/ package by uploading your own bug-fixed version to npm registry.\n\nsee use case at [unittest package.json](./test/fixtures/resolutions-alias/package.json).\n\n## Benchmarks\n\nhttps://github.com/cnpm/npminstall-benchmark\n\n### cnpmjs.org install\n\n- npminstall@1.2.0\n- pnpm@0.18.0\n- npm@2.14.12\n\ncli | real | user | sys\n--- | ---  | ---  | ---\nnpminstall | 0m10.908s | 0m8.733s | 0m4.282s\nnpminstall with cache | 0m8.815s | 0m7.492s | 0m3.644s\nnpminstall --no-cache | 0m10.279s | 0m8.255s | 0m3.932s\npnpm | 0m13.509s | 0m11.650s | 0m4.443s\nnpm | 0m28.171s | 0m26.085s | 0m8.219s\nnpm with cache | 0m20.939s | 0m19.415s | 0m6.302s\n\n### pnpm benchmark\n\nsee https://github.com/pnpm/pnpm#benchmark\n\n```bash\nnpminstall babel-preset-es2015 browserify chalk debug minimist mkdirp\n    real\t0m8.929s       user\t0m5.606s       sys\t0m2.913s\n```\n\n```bash\npnpm i babel-preset-es2015 browserify chalk debug minimist mkdirp\n    real\t0m12.998s      user\t0m8.653s       sys\t0m3.362s\n```\n\n```bash\nnpm i babel-preset-es2015 browserify chalk debug minimist mkdirp\n    real\t1m4.729s       user\t0m55.589s      sys\t0m23.135s\n```\n\n## License\n\n[MIT](LICENSE.txt)\n\u003c!-- GITCONTRIBUTOR_START --\u003e\n\n## Contributors\n\n|[\u003cimg src=\"https://avatars.githubusercontent.com/u/156269?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003efengmk2\u003c/b\u003e\u003c/sub\u003e](https://github.com/fengmk2)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/985607?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003edead-horse\u003c/b\u003e\u003c/sub\u003e](https://github.com/dead-horse)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/4635838?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003egemwuu\u003c/b\u003e\u003c/sub\u003e](https://github.com/gemwuu)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/32174276?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003esemantic-release-bot\u003c/b\u003e\u003c/sub\u003e](https://github.com/semantic-release-bot)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/6897780?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003ekillagu\u003c/b\u003e\u003c/sub\u003e](https://github.com/killagu)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/543405?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eibigbug\u003c/b\u003e\u003c/sub\u003e](https://github.com/ibigbug)\u003cbr/\u003e|\n| :---: | :---: | :---: | :---: | :---: | :---: |\n|[\u003cimg src=\"https://avatars.githubusercontent.com/u/6828924?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003evagusX\u003c/b\u003e\u003c/sub\u003e](https://github.com/vagusX)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/507615?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eafc163\u003c/b\u003e\u003c/sub\u003e](https://github.com/afc163)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/465125?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eyesmeck\u003c/b\u003e\u003c/sub\u003e](https://github.com/yesmeck)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/360661?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003epopomore\u003c/b\u003e\u003c/sub\u003e](https://github.com/popomore)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/319494?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003ewe11adam\u003c/b\u003e\u003c/sub\u003e](https://github.com/we11adam)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/7463687?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003ewhatwewant\u003c/b\u003e\u003c/sub\u003e](https://github.com/whatwewant)\u003cbr/\u003e|\n|[\u003cimg src=\"https://avatars.githubusercontent.com/u/18736572?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eemma-owen\u003c/b\u003e\u003c/sub\u003e](https://github.com/emma-owen)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/7336582?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eweihong1028\u003c/b\u003e\u003c/sub\u003e](https://github.com/weihong1028)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/49113249?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eHomyeeKing\u003c/b\u003e\u003c/sub\u003e](https://github.com/HomyeeKing)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/2972143?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003enightink\u003c/b\u003e\u003c/sub\u003e](https://github.com/nightink)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/2842176?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eXadillaX\u003c/b\u003e\u003c/sub\u003e](https://github.com/XadillaX)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/1195765?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eLeoYuan\u003c/b\u003e\u003c/sub\u003e](https://github.com/LeoYuan)\u003cbr/\u003e|\n|[\u003cimg src=\"https://avatars.githubusercontent.com/u/13602053?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003ecnlon\u003c/b\u003e\u003c/sub\u003e](https://github.com/cnlon)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/6613538?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eMoudicat\u003c/b\u003e\u003c/sub\u003e](https://github.com/Moudicat)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/6753092?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003ehanzhao\u003c/b\u003e\u003c/sub\u003e](https://github.com/hanzhao)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/431376?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003emarcbachmann\u003c/b\u003e\u003c/sub\u003e](https://github.com/marcbachmann)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/3753893?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eMondoGao\u003c/b\u003e\u003c/sub\u003e](https://github.com/MondoGao)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/19733683?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003esnyk-bot\u003c/b\u003e\u003c/sub\u003e](https://github.com/snyk-bot)\u003cbr/\u003e|\n|[\u003cimg src=\"https://avatars.githubusercontent.com/u/11251401?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eSolais\u003c/b\u003e\u003c/sub\u003e](https://github.com/Solais)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/958063?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003ethonatos\u003c/b\u003e\u003c/sub\u003e](https://github.com/thonatos)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/227713?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eatian25\u003c/b\u003e\u003c/sub\u003e](https://github.com/atian25)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/3364271?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003etommytroylin\u003c/b\u003e\u003c/sub\u003e](https://github.com/tommytroylin)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/3922719?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003ewssgcg1213\u003c/b\u003e\u003c/sub\u003e](https://github.com/wssgcg1213)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/4136679?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eyibn2008\u003c/b\u003e\u003c/sub\u003e](https://github.com/yibn2008)\u003cbr/\u003e|\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/29791463?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003efossabot\u003c/b\u003e\u003c/sub\u003e](https://github.com/fossabot)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/1908773?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003ehugohua\u003c/b\u003e\u003c/sub\u003e](https://github.com/hugohua)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/19908330?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003ehyj1991\u003c/b\u003e\u003c/sub\u003e](https://github.com/hyj1991)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/2160731?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003emansonchor\u003c/b\u003e\u003c/sub\u003e](https://github.com/mansonchor)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/13431452?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003egivingwu\u003c/b\u003e\u003c/sub\u003e](https://github.com/givingwu)\u003cbr/\u003e|[\u003cimg src=\"https://avatars.githubusercontent.com/u/1196941?v=4\" width=\"100px;\"/\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eAbreto\u003c/b\u003e\u003c/sub\u003e](https://github.com/Abreto)\u003cbr/\u003e\n\nThis project follows the git-contributor [spec](https://github.com/xudafeng/git-contributor), auto updated at `Sat Mar 25 2023 22:23:53 GMT+0800`.\n\n\u003c!-- GITCONTRIBUTOR_END --\u003e\n","funding_links":[],"categories":["Repository","JavaScript","package-manager"],"sub_categories":["NPM"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcnpm%2Fnpminstall","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcnpm%2Fnpminstall","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcnpm%2Fnpminstall/lists"}