[TOC] #### 1. 命令介绍 --- `npm config` 是 `npm` 提供的配置管理命令,用来查看、修改、删除各种配置项 可以把它理解为 `npm` 的 “设置中心”,通过这些配置,你可以控制 npm 的下载源、全局包安装位置、缓存目录等核心行为 `npm config` 常用于: + 配置代理 + 设置镜像源 + 管理缓存目录 + 管理 npm 配置 使用示例: ```bash npm get registry npm set registry https://registry.npmmirror.com npm get proxy https-proxy npm c delete proxy https-proxy ``` #### 2. 配置级别 --- `npm` 的配置具有 “优先级” 概念,常见配置文件位置: | 类型 | 位置 | | ------------ | ------------ | | 项目级 | `项目目录/.npmrc` | | 用户级 | `~/.npmrc` | | 全局级 | `$PREFIX/etc/npmrc`($PREFIX 是 node 安装目录路径) | 查看配置文件位置(优先级:项目级 > 用户级 > 全局级 > 默认配置): ```bash # 查询用户级配置文件所在位置 npm config get userconfig # 查看全局级配置文件所在位置 npm config get globalconfig ``` #### 3. 语法格式 --- 查看关于 `config` 命令的完整帮助文档 ```bash npm help config ``` 语法格式: ```plaintext npm config <command> [key] [value] ``` `config` 支持以下子命令(command): | 命令 | 作用 | | ------------ | ------------ | | set | 设置配置 | | get | 获取配置 | | delete | 删除配置 | | edit | 编辑配置文件 | | fix | 修复配置 | | list(简写 ls) | 查看配置列表 | `npm config` 命令也有简写形式,使用简写形式可以大大提升在命令行中的操作效率 ```bash # config 可以简写为 c(补充:get、set 是不能简写的) # 以下两个命令是完全等价的,在官方文档或很多资深开发者的日常操作中,经常能看到 npm c 的身影 npm c set registry https://registry.npmmirror.com npm config set registry https://registry.npmmirror.com ``` #### 4. 获取配置 --- 查看配置(以下是常用的配置项,返回根据优先级规则得出当前生效的配置) ```bash # 查看缓存目录位置 npm config get cache # 查看 node 安装位置 npm config get prefix # 查看 npm 当前镜像源 npm config get registry # 也支持一次性获取多个配置项的值(多个配置项使用空格隔开,npm 会带上配置项名称分别列出它们的值) npm config get proxy https-proxy ``` 查看所有配置列表(列出当前所有生效的配置,还会标记出配置来源,如:项目级/用户级/全局级) ```bash # 简写 npm config ls npm config list ``` 使用示例(同时在用户级和项目级别设置镜像源): ```bash npm config set registry https://registry.npmmirror.com npm config set registry "https://mirrors.cloud.tencent.com/npm/" --location=project ``` 可以看到在输出结果中清晰的标出了配置来源: + "user" config:用户级配置;"project" config:项目级配置 + 并且可以看到用户级中的 registry 配置被项目级中的 registry 重写了 ```plaintext $ npm config list ; "user" config from /Users/liang/.npmrc home = "https://www.npmjs.org" ; registry = "https://registry.npmmirror.com" ; overridden by project ; "project" config from /Users/liang/code/demo/npm/3/.npmrc registry = "https://mirrors.cloud.tencent.com/npm/" ; node bin location = /Users/liang/.nvm/versions/node/v22.22.0/bin/node ; node version = v22.22.0 ; npm local prefix = /Users/liang/code/demo/npm/3 ; npm version = 10.9.4 ; cwd = /Users/liang/code/demo/npm/3 ; HOME = /Users/liang ; Run `npm config ls -l` to show all defaults. ``` 查看所有默认配置(这里会显示默认值、当前值、来源,非常适合排查问题): ```bash # -l 显示所有配置(包含内置配置) npm config ls -l # --json 以 json 格式显示配置选项 npm config list --json ``` 前面我们使用 `npm config get registry` 查看镜像源配置,那么它查看的是哪个级别的配置呢 ? + 它查看的并不是某一个固定级别的配置,而是当前环境下实际生效的那一个(优先级最高的那个) + npm 的配置系统是一个多层级的结构,该命令会按照既定的优先级规则,从上往下查找,返回一个找到的值 + `npm config list` 同理,它会列出当前合并后所有生效的配置,并标记出配置的具体来源 npm 配置的优先级顺序(从高到低): + 命令行参数:`npm install --registry=xxx` 优先级最高 + 项目级配置:当前项目根目录下的 `.npmrc` 文件 + 用户级配置:当前用户主目录下的 `~/.npmrc` 文件(`npm config set registry` 默认就是设置在这里) + 全局级配置:npm 安装目录下的全局配置文件 `$PREFIX/etc/npmrc` + npm 内置默认值:如果以上都没有配置,最终会使用 npm 官方源(https://registry.npmjs.org) #### 5. 修改配置 --- 修改配置(默认修改的是用户级配置) ```bash # 设置初始化项目时的默认值 npm config set init-author-name "liang" npm config set init-author-email "23426945@qq.com" # 设置镜像源 npm config set registry https://registry.npmmirror.com ``` 如果想要设置项目级别的配置,使用 `--location=project` 参数即可 ```bash npm config set registry https://registry.npmmirror.com --location=project ``` “获取配置” 和 “修改配置” 命令中的 `config` 其实是可以省略不写的,这是 `npm` 官方特意设计的一种 “语法糖” + 虽然 `get` 和 `set` 可以省略前面的 `config`,但这并不代表 `npm config` 后面所有的子命令都能这样操作 + 比如:删除配置的 `delete`、`list` 都不能省略,必须老老实实写 `config` ```bash # 以下写法是完全等价的,官方允许省略 config npm get registry npm set registry https://registry.npmmirror.com/ npm config get registry npm config set registry https://registry.npmmirror.com/ ``` #### 6. 删除配置 --- 删除镜像源配置(删除后会恢复默认值) ```bash # 特别注意:默认删除的是用户级配置 npm config delete registry # 删除项目级配置(也可以手动从项目根目录下的 .npmrc 文件中删除) npm config delete registry --location=project # 同 get 命令,delete 也支持一次性删除多个配置项(c 是 config 的简写形式) npm c delete proxy https-proxy ``` #### 7. 配置代理 --- 在 npm 中设置代理,简单来说就是给 npm 的下载请求 “指定一条专属的通行路线” 设置代理有什么用 ? npm 默认的包仓库(registry)在海外,在国内的网络环境下,直接访问经常会遇到下载极慢、连接超时或连接被重置等问题 设置代理的主要作用就是解决这些网络障碍: + 加速包下载:通过配置一个速度更快、更稳定的代理服务器(或中转节点),可以显著提升下载依赖包的速度 + 突破网络限制:如果你在公司内网/校园网,或者需要通过特定的 VPN 才能访问外网,代理能让 npm 顺利穿过这些限制 npm 的代理设置主要是 `proxy`(HTTP 请求代理) 和 `https-proxy`(HTTPS 请求代理)这两个核心配置项 + 将以下命令中的代理服务器地址和端口号修改为你实际的代理信息即可 ```bash # 代理服务器地址:127.0.0.1,端口号:7890 npm set proxy http://127.0.0.1:7890 npm set https-proxy http://127.0.0.1:7890 # 也可以通过一个命令直接设置两个配置项 npm set proxy http://127.0.0.1:7890 https-proxy http://127.0.0.1:7890 ``` 查看/验证代理配置 ```bash npm get proxy https-proxy ``` 删除/取消代理(当不需要代理或者将代理服务器关闭时,记得将其删除) ```bash npm c delete proxy https-proxy ``` 除了通过 `npm config` 命令配置代理,也可以直接编辑 `.npmrc` 配置文件,手动添加或修改代理信息 ```plaintext proxy=http://127.0.0.1:7890 https-proxy=http://127.0.0.1:7890 ```