<div class="github-widget" data-repo="sindresorhus/awesome-npm"></div>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6890694312814945" data-ad-slot="5473692530" data-ad-format="auto"  data-full-width-responsive="true"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script>

&gt;太棒了 [npm](https://www.npmjs.com) 资源和提示

*请阅读 [contribution guidelines](https://github.com/sindresorhus/awesome-npm/blob/master/contributing.md) 在捐款之前.*



## Articles

- [Small focused modules](https://github.com/sindresorhus/ama/issues/10#issuecomment-117766328)
- [Unix philosophy and Node.js](http://blog.izs.me/post/48281998870/unix-philosophy-and-nodejs) -编写能做一件事并做好的程序.
- [Writing small modules](https://web.archive.org/web/20180302125059/https://substack.net/how_I_write_modules)
- [Semver: A Primer](https://nodesource.com/blog/semver-a-primer/) *（必读！）*
- [Semver: Tilde and Caret](https://nodesource.com/blog/semver-tilde-and-caret/)
- [Offline installation of npm packages](https://addyosmani.com/blog/using-npm-offline/)
- [Task automation with npm run](https://web.archive.org/web/20180302164842/http://substack.net/task_automation_with_npm_run)
- [How to use npm as a build tool](https://www.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/)
- [Install npm packages globally without sudo on macOS and Linux](https://github.com/sindresorhus/guides/blob/master/npm-global-without-sudo.md)
- [Optimizing the footprint of an npm package](https://medium.com/@goldglovecb/npm-needs-a-personal-trainer-537e0f8859c6)
- [The Art of Node](https://github.com/maxogden/art-of-node#modules) -介绍Node.js和使用npm进行客户端开发.
- [Why npm scripts?](https://css-tricks.com/why-npm-scripts/) -介绍带有常见软件包和脚本的npm脚本以及样板项目.

## Tools

### Web

- [npms](https://npms.io) -精湛的包裹搜索功能，可对包裹质量进行深入分析 [myriad of metrics](https://npms.io/about).
	- [npm-introspect](http://npm-introspect.z3d.tech) -一个基于npms的实用程序，用于直观地探索软件包依赖项的质量.
- [npmsearch](http://npmsearch.com) -快速包装搜索，基于星级，受抚养者，释放频率等指标进行排名.
- [node-modules](http://node-modules.com) -基于GitHub社交图的个性化软件包搜索.
- [NodeICO](https://nodei.co/) -包装徽章.
- [Libraries.io](https://libraries.io/npm) -包发现.
- [npm-stat](http://npm-stat.com) -包的统计图.
- [npmgraph](http://npm.anvaka.com) -依赖关系的可视化.
- [npm trends](http://www.npmtrends.com) -比较随时间推移的软件包下载计数.
- [npm-compare](https://npmcompare.com) -轻松搜索和比较软件包.
- [npm-top](https://gist.github.com/bcoe/dcc961b869bbf6685002) -通过下载下载npm用户.
- [npm semver calculator](http://semver.npmjs.com) -直观地探索一个semver范围匹配的软件包版本.
- [npm-stats](http://www.npm-stats.com) -显示有关程序包的指标.
- [greenkeeper.io](https://greenkeeper.io) -通过拉取请求自动进行依赖项更新.
- [ghub.io](https://ghub.io) -重定向到npm软件包的GitHub存储库.
- [npm addict](https://npmaddict.com) -您每天注入npm软件包.

### Browser extensions

- [Octo-Linker](https://chrome.google.com/webstore/detail/octo-linker/jlmafbaeoofdegohdhinkhilhclaklkp) -Chrome扩展程序可轻松浏览GitHub上的npm软件包.
- [npm-hub](https://chrome.google.com/webstore/detail/npm-hub/kbbbjimdjbjclaebffknlabpogocablj) -Chrome扩展程序，用于探索GitHub存储库上的npm依赖性.
- [github-npm-stats](https://chrome.google.com/webstore/detail/github-npm-stats/oomfflokggoffaiagenekchfnpighcef) -在GitHub上查看npm下载统计信息.
- [npm-search-update](https://chrome.google.com/webstore/detail/npm-search-update/kagpoplamlmaonpddimnnigiojimihnh) -Chrome扩展程序可快速搜索依赖项并监视npm注册表中的更改.

### CLI

- [zsh-better-npm-completion](https://github.com/lukechilds/zsh-better-npm-completion) -npm的ZSH更好地完成.
- [npkill](https://github.com/voidcosmos/npkill) -轻松查找并删除旧的沉重的node_modules文件夹.

## Packages

### Publishing

- [np](https://github.com/sindresorhus/np) -更好的“ npm发布”.
- [publish-please](https://github.com/inikulin/publish-please) -安全，优雅地发布软件包.
- [npm-release](https://github.com/phuu/npm-release) -使释放到npm变得容易，小猫可以做到这一点™.
- [pkgfiles](https://github.com/timoxley/pkgfiles) -列出将在程序包中发布的所有文件.
- [release-it](https://github.com/webpro/release-it)  -自动发布Git存储库和/或npm软件包.  更改日志生成，GitHub / GitLab版本等.
- [semantic-release](https://github.com/semantic-release/semantic-release) -全自动软件包发布.

### Registry

- [npm-name](https://github.com/sindresorhus/npm-name-cli) -检查软件包名称在npm上是否可用.
- [package-json](https://github.com/sindresorhus/package-json) -从npm注册表中获取软件包的package.json.
- [latest-version](https://github.com/sindresorhus/latest-version-cli) -获取npm软件包的最新版本.
- [npm-keyword](https://github.com/sindresorhus/npm-keyword) -获取带有特定关键字的npm软件包列表.
- [npm-user](https://github.com/sindresorhus/npm-user) -获取npm用户的用户信息.
- [npm-email](https://github.com/sindresorhus/npm-email) -获取npm用户的电子邮件.
- [npm-user-packages](https://github.com/kevva/npm-user-packages-cli) -由npm用户获取软件包.
- [dpn](https://github.com/gillstrom/dpn) -获取用户npm软件包的依赖项.
- [npm-stats](https://github.com/hughsk/npm-stats) -从npm注册表获取数据.
- [npm-cli-login](https://github.com/postmanlabs/npm-cli-login) -登录到npm.
- [nrm](https://github.com/Pana/nrm) -注册表管理员.
- [npm-register](https://github.com/dickeyxxx/npm-register) -易于设置和维护npm注册表和代理.
- [verdaccio](https://github.com/verdaccio/verdaccio) -轻量级私人npm代理注册表.
- [cloudsmith](https://cloudsmith.io/l/npm-registry/) -全面管理的软件包管理SaaS，支持公共和私有npm注册表（以及许多其他注册表）.

### Other

- [npm-home](https://github.com/sindresorhus/npm-home) -打开软件包的npm页面.
- [gh-home](https://github.com/sindresorhus/gh-home) -打开软件包的GitHub页面.
- [david](https://github.com/alanshaw/david) -检查您的软件包依赖关系是否过时.
- [npm-check](https://github.com/dylang/npm-check) -检查过时，不正确和未使用的依存关系，以及交互式更新.
- [npm-upgrade](https://github.com/th0r/npm-upgrade) -以交互方式更新过时的npm依赖项.
- [npm-shrinkwrap](https://github.com/uber/npm-shrinkwrap) -一致的拆封工具.
- [npm-windows-upgrade](https://github.com/felixrieseberg/npm-windows-upgrade) -在Windows上升级npm.
- [generator-nm](https://github.com/sindresorhus/generator-nm) -脚手架出一个npm包.
- [pkg-up](https://github.com/sindresorhus/pkg-up) -找到最近的package.json文件.
- [read-pkg-up](https://github.com/sindresorhus/read-pkg-up) -阅读最近的package.json文件.
- [normalize-package-data](https://github.com/npm/normalize-package-data) -规范包元数据.
- [pkg-conf](https://github.com/sindresorhus/pkg-conf) -从最近的package.json获取命名空间的配置.
- [npm-run-path](https://github.com/sindresorhus/npm-run-path) -在终端中按名称运行本地安装的二进制文件，就像使用全局二进制文件一样.
- [local-npm](https://github.com/nolanlawson/local-npm) -在海平面以上使用 [offline](https://addyosmani.com/blog/using-npm-offline/).
- [npe](https://github.com/zeke/npe) -CLI，用于检查和编辑package.json中的属性.
- [engine-deps](https://github.com/samccone/engine-deps) -轻松管理特定于Node.js版本的依赖项.
- [enpeem-search](https://github.com/amovah/enpeem-search) -通过抓取npm网络搜索来搜索软件包.
- [npm-issues](https://github.com/seanzarrin/npm-issues) -一次搜索所有软件包的已知问题.
- [john](https://github.com/davej/john) -使npm3的平面依赖项更易于查找和排序.
- [ntl](https://github.com/ruyadorno/ntl) -交互式CLI菜单，列出并运行npm任务.
- [decheck](https://github.com/egoist/decheck) -在命令行中探索npm软件包的依赖性.
- [shrinkpack](https://github.com/JamieMason/shrinkpack) -锁定依赖项并脱机安装.
- [redrun](https://github.com/coderaiser/redrun) -从package.json扩展脚本以提高执行速度.
- [package-size](https://github.com/egoist/package-size) -获取npm软件包的捆绑包大小.
- [synp](https://github.com/imsnif/synp) -将yarn.lock转换为package-lock.json，反之亦然.
- [npm-run-all](https://github.com/mysticatea/npm-run-all) -CLI工具可并行或串行运行多个npm脚本.
- [onchange](https://github.com/Qard/onchange) -监视文件和文件夹，并在发生更改时运行命令.
- [cli-error-notifier](https://github.com/micromata/cli-error-notifier) -当npm脚本失败时发送本机桌面通知.
- [luna](https://github.com/rvpanoz/luna) -应用程序来管理npm依赖项.
- [emma-cli](https://github.com/maticzav/emma-cli) -交互式CLI软件包搜索实用程序.
- [lockfile-lint](https://github.com/lirantal/lockfile-lint) -整理锁文件以提高安全性和信任策略，以减轻恶意程序包注入和不安全的锁文件资源.

## Clients

- [yarn](https://github.com/yarnpkg/yarn) -快速，可靠和安全的依赖性管理.
- [npm](https://github.com/npm/cli) -官方客户.
- [pnpm](https://github.com/pnpm/pnpm) -快速，磁盘空间高效的软件包管理器.

## Tips

### Update to the latest npm version

```
$ npm install-全局npm
```

*[Windows users, read more.](https://github.com/felixrieseberg/npm-windows-upgrade)*

### Command aliases

-`npm and`→`npm install`
-`npm i -D`→`npm install --save-dev`
-`npm t`→`npm test`
-`npm it`→`npm install &amp;&amp; npm测试`
-`npm r`→`npm卸载`

### Shell aliases

加快常见的npm任务.

在您的`.zshrc` /`.bashrc`中：

```sh
别名ni =&#39;npm install&#39;
别名nid =&#39;npm install --save-dev&#39;
别名nig =&#39;npm install --global&#39;
别名nt =&#39;npm测试&#39;
别名nit =&#39;npm install &amp;&amp; npm测试&#39;
别名nk =&#39;npm链接&#39;
别名nr =&#39;npm run&#39;
别名ns =&#39;npm start&#39;
别名nf =&#39;npm缓存清理&amp;&amp; rm -rf node_modules &amp;&amp; npm安装&#39;
别名nlg =&#39;npm list --global --depth = 0&#39;
```

### Don't add to package.json when installing

 默认情况下，npm将您安装的软件包添加到package.json中的“ dependencies”字段（自v5起）.  您可以通过指定`--no-save`标志来防止这种情况.  您可以使用`--save-dev` /`-D`将软件包添加到`devDependencies`中：

```
$ npm install --save-dev ava
```

### Run scripts

您可以轻松地 [run scripts](https://docs.npmjs.com/cli/run-script)  通过将npm添加到package.json中的“ scripts”字段来使用npm并使用npm run运行它们 <script-name>  `.  运行`npm run`查看可用的脚本.  本地安装软件包的二进制文件位于 [PATH](https://en.wikipedia.org/wiki/PATH_(variable)), so you can run them by name.

```json
{
	“ name”：“很棒的包装”，
	“脚本”：{
		“ cat”：“猫名”
	},
	“依赖关系”：{
		“猫名”：“ ^ 1.0.0”
	}
}
```

```
$ npm跑猫
Max
```

所有package.json属性都是 [exposed](https://docs.npmjs.com/misc/scripts#packagejson-vars) 作为环境变量：

```json
{
	“ name”：“很棒的包装”，
	“脚本”：{
		“ name”：“ echo $ npm_package_name”
	}
}
```

```
$ npm运行名称
awesome-package
```

#### Passing options to commands

 您可以通过添加`---flag`来将选项传递给您在npm脚本中使用的命令，如以下示例所示.  `- [marks the end of options parsing](https://unix.stackexchange.com/questions/11376/what-does-double-dash-mean-also-known-as-bare-double-dash)，因此`npm run`只会忽略它并将其传递给命令.

```json
{
	“ name”：“很棒的包装”，
	“脚本”：{
		“ xo”：“ xo”，
		“ xo：fix”：“ npm run xo---fix”，
	}
}
```

*添加`---fix`选项就像执行`xo --fix` **.

#### Silent option

npm run有一个--silent选项，在组合npm脚本时特别有用.

假设您有一个用于整理JavaScript文件的设置，如下所示：

```json
{
	“ name”：“很棒的包装”，
	“脚本”：{
		“ xo”：“ xo”，
		“ xo：fix”：“ npm run xo --silent---fix”，
	}
}
```

 *使用`--silent`选项会减少终端的输出.  看到 [this comparison](https://twitter.com/mkuehnel/status/957965749473210369).*

### Lifecycle scripts

npm带有预定义 [lifecyle scripts](https://docs.npmjs.com/misc/scripts) 如果在package.json中定义了特定条件，则在特定条件下执行.

```json
{
	“ name”：“很棒的包装”，
	“脚本”：{
		“ prepublishOnly”：“ nsp检查”
	},
	“ devDependencies”：{
		“ nsp”：“ ^ 3.0.0”
	}
}
```

这将在您的npm软件包通过“ npm publish”发布到注册表之前自动执行，以检查依赖项中的已知漏洞.

 *注意：** prepublishOnly **自npm v4.0.0起可用.  看到 [npm docs](https://docs.npmjs.com/misc/scripts#deprecation-note).*

#### `npm start` and `npm test`

“ npm start”和“ npm test”也是生命周期脚本，但不会自动执行.

```json
{
	“ name”：“很棒的包装”，
	“脚本”：{
		“ start”：“节点server.js”，
		“ test”：“ ava”
	},
	“ devDependencies”：{
		“水”：“ ^ 1.0.0”
	}
}
```

因此，可以使用以下命令简单地执行它们：

```console
$ npm测试
$ npm开始
```

#### `pre` and `post` scripts

这些是特殊的生命周期脚本，可用于按顺序自动运行脚本.

```json
{
	“ name”：“很棒的包装”，
	“脚本”：{
		“ pretest”：“大便.”，
		“ test”：“ ava”
	},
	“ devDependencies”：{
		“ eslint”：“ ^ 4.19.0”，
		“水”：“ ^ 1.0.0”
	}
}
```

```console
$ npm测试
```

 在运行测试之前，这将使文件掉毛.  如果掉毛失败，测试将不会运行.  或更普遍地说：如果按顺序运行的脚本之一退出时退出代码不是0，则不会执行以下脚本.

 *注意：`pre`和`post`脚本也可以用于您的自定义npm脚本.  所以`npm run foo`也将运行`prefoo`和`postfoo`.

### Run script with `npx`

`npm` [comes bundled](https://medium.com/@maybekatz/introducing-npx-an-npm-package-runner-55f7d4bd282b)  与`npx`（自v5.2.0起）—一种执行软件包二进制文件的工具.  每个命令都可以从本地`node_modules / .bin`目录执行，也可以从中央高速缓存执行，安装` <command>  `运行.

```json
{
	“ name”：“很棒的包装”，
	“依赖关系”：{
		“猫名”：“ ^ 1.0.0”
	}
}
```

如果已经安装了二进制文件，它将在`node_modules / .bin`中执行.

```
$ npx猫名
Max
```

但是，如果缺少二进制文件，将首先安装它.

```
$ npx狗名
npx：在3.136s中安装了46
Bentley
```

### Run commands with different Node.js versions

使用`npx`（与npm v5.2.0或更高版本捆绑在一起）和 [`node-bin`](https://www.npmjs.com/package/node-bin) 软件包，您可以轻松试用不同Node.js版本中的代码，而不必使用版本管理器，例如 [`nvm`](http://nvm.sh), [`nave`](https://github.com/isaacs/nave)， 要么 [`n`](https://github.com/tj/n).

```
$ npx --package=node-bin@6.11.0-节点--version
v6.11.0
```

### Link local packages

 有时，将软件包的本地版本作为依赖项可能很有用.  您可以使用“ npm link”将一个本地软件包链接到另一个本地软件包.  在您要使用的软件包中运行`npm link`.  这将创建一个全局参考.  然后进入原始包并运行`npm link <package-name>  链接到另一个包.

```
$ cd彩虹
$ npm链接
$ cd ../unicorn
$ npm链接彩虹
```

现在，您可以将`rainbow`用作`unicorn`软件包中的依赖项.

### Install a package from GitHub

npm支持使用简写直接从GitHub存储库安装软件包：

```
$ npm安装sindresorhus /粉笔
```

我们以一个特定的提交作为目标，因为master是一个移动的目标：

```
$ npm install 'sindresorhus/chalk#51b8f32'
```

指定提交SHA，分支，​​标记或不指定任何内容.

您还可以使用semver安装Git依赖项：*（需要npm v5或更高版本）*

```
$ npm install 'sindresorhus/chalk#semver:^2.0.0'
```

### Install a specific version of a package

```
$ npm安装粉笔@ 1.0.0
```


### List top-level installed packages and their version

```
$ npm ls --depth = 0
```

### Command help

获取命令的帮助文档：

```
$ npm帮助<command>
```

Example:

```
$ npm帮助安装
```

### Standalone version of a package

快速获得可浏览器化并在浏览器中可用的软件包的独立版本.

```
https://wzrd.in/standalone/<package-name>[@<version>]
```

Examples:

- <https://wzrd.in/standalone/object-assign>
- <https://wzrd.in/standalone/object-assign@4.0.0>

非常适合制作原型，但可以下载文件或使用Browserify进行生产.

## FAQ

- [Check in node_modules vs. shrinkwrap](http://stackoverflow.com/questions/11459733/check-in-node-modules-vs-shrinkwrap)
- [What is the difference between Bower and npm?](http://stackoverflow.com/questions/18641899/what-is-the-difference-between-bower-and-npm)
- [What does `^` mean in package.json versioning?](http://stackoverflow.com/questions/22137778/what-does-mean-in-package-json-versioning)
- [Find the version of an installed npm package](http://stackoverflow.com/questions/10972176/find-the-version-of-an-installed-npm-package)
- [What's the difference between dependencies, devDependencies, and peerDependencies in package.json?](http://stackoverflow.com/questions/18875674/whats-the-difference-between-dependencies-devdependencies-and-peerdependencies)

## Community

- [`#npm` on Freenode](http://webchat.freenode.net/?channels=npm)
- [Stack Overflow](https://stackoverflow.com/questions/tagged/npm)
- [Reddit](https://www.reddit.com/r/npm)
- [Twitter](https://twitter.com/npmjs)
- [Blog](https://blog.npmjs.org)

## Documentation

- [Official](https://docs.npmjs.com)
- [Troubleshooting](https://github.com/npm/npm/wiki/Troubleshooting)
- [Semantic versioning](https://docs.npmjs.com/getting-started/semantic-versioning)
- [Fixing npm permissions](https://docs.npmjs.com/getting-started/fixing-npm-permissions)
- [package.json](https://docs.npmjs.com/files/package.json)
- [npm run script](https://docs.npmjs.com/cli/run-script)
- [Stats API](https://github.com/npm/download-counts)

## Support

- [npm.community](https://npm.community/c/support)
- [Twitter](https://twitter.com/npm_support)
- [Contact form](https://www.npmjs.com/support)

## Related

- [awesome-nodejs](https://github.com/sindresorhus/awesome-nodejs)
