text: <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)
  