# npm
javascript 包管理器
# 版本
8.19.1
# 描述
npm 是 Node JavaScript 平台的包管理器。它将模块放置到位,以便节点能够找到它们,并智能地管理依赖冲突。
它具有极强的可配置性,可以支持各种用例。最常见的是,您使用它来发布、发现、安装和开发节点程序。
运行 npm help
以获取可用命令的列表。
# 重要
npm 预设为默认使用 npm 的公共注册中心 https://registry.npmjs.org
。npm 公共注册中心的使用受 https://docs.npmjs.com/policies/terms
提供的使用条款的约束。
您可以将 npm 配置为使用您喜欢的注册中心,甚至可以运行您自己的注册中心。使用他人的注册中心受其使用条款的约束。
# 介绍
你想要安装的东西可能会从 npm 得到。
您最可能希望在任何节点程序中运行的第一件事是 npm install
,以安装其依赖项。
您也可以运行 npm install blerg
来安装 "blerg" 的最新版本。查看 npm install
了解更多信息。它可以做很多事情。
使用 npm search
命令显示公共注册中心中可用的所有内容。使用 npm ls
显示已安装的所有内容。
# 依赖项
如果一个包列出了一个使用 git URL 的依赖项,npm 将使用 git
命令安装该依赖项,如果没有安装,则会生成一个错误。
如果 npm 试图安装的其中一个包是一个本地节点模块,并且需要编译 c++ 代码,npm 将使用 node-gyp
完成该任务。对于 Unix 系统,node-gyp
需要 Python
、make
和 GCC
这样的构建链。在 Windows 上,需要 Python
和 Microsoft Visual Studio c++
。更多信息请访问 node-gyp
存储库和 node-gyp Wiki
。
# 目录
请参阅 folders
以了解 npm 放置内容的位置。
特别是,npm 有两种操作模式:
- 本地模式:npm 将包安装到当前项目目录,默认为当前工作目录。软件包安装到
./node_modules
,并将 bin 安装到./node_modules/.bin
。 - 全局模式:npm将包安装到
$npm_config_prefix/lib/node_modules
到$npm_config_prefix/bin
的安装前缀中。
默认为本地模式。在任何命令上使用 -g
或 --global
来代替全局模式运行。
# 开发者使用
如果您使用 npm 开发和发布代码,请查看以下帮助主题:
- json: 制作一个
package.json
文件。详见package.json
。 - link: 将您当前的工作代码链接到 Node 的路径中,这样您就不必每次进行更改时都重新安装。用
npm link
执行此操作。 - install: 如果不需要符号链接,那么安装一些东西是个好主意。特别是,从注册中心安装其他人的代码是通过
npm install
完成的。 - adduser: 创建一个帐户或登录。当你这样做时,npm 会将凭据存储在用户配置文件中。
- publish: 使用
npm publish
命令将你的代码上传到注册中心。
# 配置
NPM 是非常可配置的。它从 5 个地方读取配置选项。
- 命令行开关: 使用
--key val
设置配置。所有键都有一个值,即使它们是布尔值(配置解析器在解析时不知道选项是什么)。如果不提供值 (--key
),则将该选项设置为布尔值true
。 - 环境变量: 通过在环境变量的名称前面加上
npm_config_
来设置任何配置。例如,export npm_config_key=val
。 - 用户配置:
$HOME/.npmrc
上的文件是一个 ini 格式的配置列表。如果存在,则解析它。如果在 cli 或 env 中设置了userconfig
选项,则将使用该文件。 - 全局配置: 如果找到位于
./etc/npmrc
(相对于全局前缀)的文件,将对其进行分析。有关全局前缀的更多信息,请参阅npm prefix
。如果在cli、env或用户配置中设置了globalconfig
选项,则将对该文件进行分析。 - 默认值: Npm 的默认配置选项定义在
lib/utils/config-defs.js
中。这些都不能改变。
有关 config
更多信息,请参阅 config
配置。
# 贡献
欢迎补丁!
如果您想提供帮助,但不知道该做什么,请阅读贡献指南并检查问题列表。
# 错误
当您发现问题时,请报告它们: https://github.com/npm/cli/issues
请务必遵循模板和错误报告指南。
# 功能请求
在我们的论坛上讨论新功能的想法:
https://github.com/npm/feedback
或者建议正式的 RFC 提案:
https://github.com/npm/rfcs