npm
> 太棒了 npm 资源和提示
npm 是 JavaScript 编程语言的包管理器,捆绑在 Node.js 运行.
请阅读 contribution guidelines 在贡献之前.
Articles¶
- Small focused modules
- Unix philosophy and Node.js - 编写只做一件事并把它做好的程序.
- Writing small modules
- Semver: A Primer (必读!)
- Semver: Tilde and Caret
- Offline installation of npm packages
- Task automation with npm run
- How to use npm as a build tool
- Install npm packages globally without sudo on macOS and Linux
- Optimizing the footprint of an npm package
- The Art of Node - 介绍 Node.js 和使用 npm 进行客户端开发.
- Why npm scripts? - 介绍带有通用包和脚本的 npm 脚本,以及样板项目.
Tools¶
Web¶
- npms - 精湛的包裹搜索,使用深度分析包裹质量 myriad of metrics.
- NodeICO - 包裹徽章.
- Libraries.io - 包发现.
- npm-stat - 包的统计图表.
- npmgraph - 依赖关系的可视化.
- npm trends - 比较一段时间内的包下载次数.
- npm-compare - 轻松搜索和比较包.
- npm-top - 通过下载 npm 用户.
- npm semver calculator - 直观地探索一个 semver 范围匹配的包版本.
- ghub.io - 重定向到 npm 包的 GitHub 存储库.
- moiva - 发现和比较包.
Browser extensions¶
- Octo-Linker - Chrome 扩展,可轻松浏览 GitHub 上的 npm 包.
- npm-hub - Chrome 扩展,用于探索 GitHub 存储库上的 npm 依赖项.
- github-npm-stats - 在 GitHub 上查看 npm 下载统计信息.
- npm-search-update - Chrome 扩展,可快速搜索依赖项并监控 npm 注册表中的更改.
CLI¶
- zsh-better-npm-completion - 更好地为 npm 完成 ZSH.
- npkill - 轻松找到并删除旧的和繁重的 node_modules 文件夹.
Packages¶
Publishing¶
- np - 更好的
npm publish
. - publish-please - 安全优雅地发布包.
- npm-release - 使发布到 npm 变得如此简单,小猫可能会做到™.
- pkgfiles - 列出将在包中发布的所有文件.
- release-it - 自动发布 Git 存储库和/或 npm 包. 变更日志生成、GitHub/GitLab 发布等.
- semantic-release - 全自动包发布.
Registry¶
- npm-name - 检查包名称是否在 npm 上可用.
- package-json - 从 npm 注册表获取包的 package.json.
- latest-version - 获取最新版本的 npm 包.
- npm-keyword - 获取带有特定关键字的 npm 包列表.
- npm-user - 获取 npm 用户的用户信息.
- npm-email - 获取 npm 用户的电子邮件.
- npm-user-packages - 由 npm 用户获取包.
- dpn - 获取用户 npm 包的依赖项.
- npm-stats - 从 npm 注册表获取数据.
- npm-cli-login - 登录 npm.
- nrm - 注册管理器.
- npm-register - 易于设置和维护 npm 注册表和代理.
- verdaccio - 轻量级私有 npm 代理注册表.
- cloudsmith - 一个完全托管的包管理 SaaS,支持公共和私人 npm 注册表(以及许多其他注册表).
Other¶
- npm-home - 打开包的 npm 页面.
- gh-home - 打开包的 GitHub 页面.
- david - 检查您的软件包依赖项是否已过期.
- npm-check - 检查过时的、不正确的和未使用的依赖项,以及交互式更新.
- npm-upgrade - 以交互方式更新过时的 npm 依赖项.
- npm-shrinkwrap - 一致的收缩包装工具.
- npm-windows-upgrade - 在 Windows 上升级 npm.
- generator-nm - 搭建一个 npm 包.
- pkg-up - 找到最近的 package.json 文件.
- read-pkg-up - 阅读最近的 package.json 文件.
- normalize-package-data - 标准化包元数据.
- pkg-conf - 从最近的 package.json 获取命名空间配置.
- npm-run-path - 按名称在终端中运行本地安装的二进制文件,就像全局二进制文件一样.
- local-npm - 使用 npm offline.
- npe - 用于检查和编辑 package.json 中的属性的 CLI.
- engine-deps - 轻松管理 Node.js 版本特定的依赖项.
- enpeem-search - 通过抓取 npm 网络搜索来搜索包.
- npm-issues - 一次搜索所有包的已知问题.
- john - 使 npm3 的平面依赖项更易于查找和排序.
- ntl - 用于列出和运行 npm 任务的交互式 CLI 菜单.
- decheck - 在命令行中探索 npm 包的依赖关系.
- shrinkpack - 锁定您的依赖项并离线安装.
- redrun - 扩展 package.json 中的脚本以提高执行速度.
- package-size - 获取 npm 包的包大小.
- synp - 将 yarn.lock 转换为 package-lock.json,反之亦然.
- npm-run-all - 用于并行或串行运行多个 npm 脚本的 CLI 工具.
- onchange - 监视文件和文件夹并在发生变化时运行命令.
- cli-error-notifier - 当 npm 脚本失败时发送本机桌面通知.
- luna - 用于管理 npm 依赖项的应用程序.
- emma-cli - 交互式 CLI 包搜索实用程序.
- lockfile-lint - 用于改进安全性和信任策略的 Lint 锁文件,以减轻恶意包注入和不安全的锁文件资源.
Clients¶
Tips¶
Update to the latest npm version¶
$ npm 安装 --global npm
Command aliases¶
-npm i
→npm install
- npm i -D
→ npm install --save-dev
- npm t
→ npm test
- npm it
→ npm install && npm test
- npm r
→ npm uninstall
- npm un
→ npm uninstall
- npm up
→ npm update
Shell aliases¶
加速您的常见 npm 任务.
在你的 .zshrc
/.bashrc
中:
别名 ni='npm 安装'
别名 nid='npm install --save-dev'
别名 nig='npm install --global'
别名 nt='npm 测试'
别名 nit='npm install && npm test'
别名 nk='npm 链接'
别名 nr='npm run'
别名 ns='npm 开始'
别名 nf='npm 缓存清理 && rm -rf node_modules && npm install'
别名 nlg='npm list --global --depth=0'
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 通过将它们添加到 package.json 中的“脚本”字段并使用 npm run 运行它们来使用 npm
{
"name": "awesome-package",
“脚本”:{
“猫”:“猫的名字”
},
“依赖”:{
“猫名”:“^1.0.0”
}
}
$ npm 运行猫
Max
所有 package.json 属性都是 exposed 作为环境变量:
{
"name": "awesome-package",
“脚本”:{
“名称”:“回声 $npm_package_name”
}
}
$ npm 运行名称
awesome-package
Passing options to commands¶
您可以通过添加 -- --flag
将选项传递给您在 npm 脚本中使用的命令,如下例所示. --
marks the end of options parsing,因此 npm run
将忽略它并将其传递给命令.
{
"name": "awesome-package",
“脚本”:{
“xo”:“xo”,
"xo:fix": "npm run xo -- --fix",
}
}
添加 -- --fix
选项就像执行 xo --fix
.
Silent option¶
npm run
有一个 --silent
选项,在组合 npm 脚本时特别有用.
想象一下,您有一个像下面这样对 JavaScript 文件进行 linting 的设置:
{
"name": "awesome-package",
“脚本”:{
“xo”:“xo”,
"xo:fix": "npm run xo --silent -- --fix",
}
}
使用 --silent
选项减少终端中的输出. 看 this comparison.
Lifecycle scripts¶
npm 自带预定义 lifecyle scripts 如果它们在您的 package.json 中定义,它们将在特定条件下执行.
{
"name": "awesome-package",
“脚本”:{
“prepublishOnly”:“nsp 检查”
},
“devDependencies”:{
“nsp”:“^3.0.0”
}
}
这将在您的 npm 包通过“npm publish”发布到注册表之前自动执行,以检查您的依赖项中的已知漏洞.
注意:prepublishOnly 从 npm v4.0.0 开始可用. 看 npm docs.
npm start
and npm test
¶
npm start
和 npm test
也是生命周期脚本,但不会自动执行.
{
"name": "awesome-package",
“脚本”:{
“开始”:“节点服务器.js”,
“测试”:“艾娃”
},
“devDependencies”:{
“ava”:“^1.0.0”
}
}
因此它们可以简单地执行:
$ npm 测试
$ npm 开始
pre
and post
scripts¶
这些是特殊的生命周期脚本,可用于按顺序自动运行脚本.
{
"name": "awesome-package",
“脚本”:{
“预测试”:“eslint.”,
“测试”:“艾娃”
},
“devDependencies”:{
"eslint": "^4.19.0",
“ava”:“^1.0.0”
}
}
$ npm 测试
这将在运行测试之前检查您的文件. 如果 linting 失败,测试将不会运行. 或者更通俗地说:如果按顺序运行的脚本之一以非 0 的退出代码退出,则不会执行以下脚本.
注意:pre
和 post
脚本也可以用于您的自定义 npm 脚本. 所以如果定义了 npm run foo
也会运行 prefoo
和 postfoo
.
Run script with npx
¶
npm
comes bundled with npx
(Since v5.2.0) — 一个执行包二进制文件的工具. 每个命令都从本地 node_modules/.bin
目录或中央缓存执行,安装所需的任何包以<command>
运行.
{
"name": "awesome-package",
“依赖”:{
“猫名”:“^1.0.0”
}
}
如果二进制文件已经安装,它将从 node_modules/.bin
执行.
$ npx 猫名
Max
但是如果二进制文件丢失,它将首先安装.
$ npx 狗名
npx:在 3.136 秒内安装了 46 个
Bentley
Run commands with different Node.js versions¶
使用 npx
(与 npm v5.2.0 或更新版本捆绑在一起)和 node-bin
包,您可以轻松地在不同的 Node.js 版本中尝试代码,而无需使用像这样的版本管理器 nvm
, nave
, 或者 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/粉笔
让我们定位一个特定的提交,因为主分支是一个移动的目标:
$ 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 安装 chalk@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:
非常适合原型制作,但下载文件或自己使用 Browserify 进行生产.
FAQ¶
- Check in node_modules vs. shrinkwrap
- What is the difference between Bower and npm?
- What does
^
mean in package.json versioning? - Find the version of an installed npm package
- What's the difference between dependencies, devDependencies, and peerDependencies in package.json?
Community¶
Documentation¶
- Official
- Troubleshooting
- Semantic versioning
- Fixing npm permissions
- package.json
- npm run script
- Stats API