目录
[什么是 npm](#什么是 npm)
[npm 主要功能](#npm 主要功能)
[安装配置 npm 环境](#安装配置 npm 环境)
[package.json 版本范围规则](#package.json 版本范围规则)
[使用 npm](#使用 npm)
[npm 版本和帮助命令](#npm 版本和帮助命令)
[npm 包相关命令](#npm 包相关命令)
[package.json 相关](#package.json 相关)
[npm 包发布相关](#npm 包发布相关)
[npm 仓库镜像源](#npm 仓库镜像源)
[配置 cnpm](#配置 cnpm)
什么是 npm
npm(Node Package Manager)是 Node.js 的官方包管理工具。它用于管理 JavaScript 包和模块,尤其是针对 Node.js 环境下的应用程序。npm 使开发者能够轻松地安装、共享和更新 JavaScript 代码包或库。
npm 主要功能
- 安装依赖包:npm 让你能够方便地第三方安装库(比如express),把lodash它们react作为项目的依赖项。
- 管理依赖:它帮助您管理项目中所有的依赖项,并确保版本的一致性,避免出现不同开发环境中版本不兼容的情况。
- 分享和发布包:你可以将自己编写的代码压缩成npm包,把它们发布到npm官方仓库,供其他开发者使用。
npm 官方仓库地址:https://www.npmjs.com
安装配置 npm 环境
请查看:https://blog.csdn.net/a1053765496/article/details/145473576
package.json 版本范围规则
版本写法 | 允许升级的范围 | 示例 |
---|---|---|
^x.y.z | 大版本不变,次版本和补丁可升级 | ^4.17.21 → 可升级到 4.x.x ,但不会升到 5.0.0 |
~x.y.z | 次版本不变,仅补丁可升级 | ~4.16.0 → 可升级到 4.16.x ,但不会变成 4.17.0 |
x.y.z | 完全锁定,不会升级 | 0.21.1 只能安装 0.21.1 |
latest | 始终安装最新版本 | 始终获取 npm 仓库的最新版本 |
语义化版本说明 (Semantic Versioning,SemVer)
<major>.<minor>.<patch>
- Major version(主版本):表示有 破坏性变更,不向后兼容。例如,从 2.x.x 升级到 3.0.0。
- Minor version(次版本):表示添加了 新特性,但向后兼容。例如,从 2.1.x 升级到 2.2.0。
- Patch version(补丁版本):表示 修复 bug,且向后兼容。例如,从 2.1.0 升级到 2.1.1。
使用 npm
npm 版本和帮助命令
bash
# 查看npm版本
nvm -v
# 同 nvm -v 查看npm版本
npm --version
# 查看 npm 帮助信息
npm -h
# 同 npm -h 查看 npm 帮助信息
npm --help
# 查看某个命令的使用方法,例如 npm help install
npm help <command>
npm 包相关命令
安装包
bash
# 安装 package.json 中的包
npm install
# 安装某个包(默认安装最新版本)
npm install <package>
# 安装指定版本的包,例如 npm install express@4.17.1
npm install <package>@<version>
# 旧版 npm(5.x 之前)需要 --save 来保存依赖(现已默认保存)
npm install <package> --save
# 安装包并保存到 devDependencies(仅用于开发环境)
npm install <package> --save-dev
# 全局安装
npm install <package> -g
# 去重依赖,合并相同的依赖包,减少 node_modules 体积
npm dedupe
# 清理(Clean)并安装(Install)依赖,更快、更严格,适用于 CI/CD 环境。
# ci 详细介绍如下:
# npm ci 不会修改 package-lock.json,它会强制安装 package-lock.json 里指定的版本,确保依赖完全一致。
# 如果 package-lock.json 和 package.json 不匹配,它会报错。
# npm ci 不会检查已安装的 node_modules,而是直接删除它并重新安装所有依赖。
# 适用于 CI/CD 和自动化部署,确保环境干净,避免 npm install 可能带来的依赖冲突。
npm ci
卸载包
bash
# 卸载某个已安装的包
npm uninstall <package>
# 全局卸载
npm uninstall <package> -g
# 同 uninstall,移除某个包
npm remove <package>
升级第三方包
bash
# 更新本地安装的某个包
npm update <package>
# 更新全局安装的某个包
npm update -g <package>
# 更新 package.json 里所有可以安全更新的包
npm update
# 检查哪些包需要更新
npm outdated
npm update 命令会把包升级成功,但是 package.json 文件中的版本号不会自动修改,可以使用 npm list <package> 来查看指定包的版本号,会发现更新后的包和 package.json 中的版本号不一致。
推荐使用,更新所有
可以使用 npx npm-check-updates -u,来检查 package.json 文件中所有依赖的版本号,使它们自动更新到最新的符合 package.json 规则的版本(这时只修改了文件中的版本号,还没有进行安装)。然后使用 npm install 进行最新版本的安装。
bash
npx npm-check-updates -u
npm install
推荐使用,更新一个
也可以使用 npm install <package>@<version> 命令,直接把某一个包强制更新到指定的版本,此命令不用遵守 package.json 版本范围规则。
bash
# npm install <package>@<version>
npm install express@4.21.2
升级自己开发的包
npm version 是用于管理和更新项目版本的 npm 命令,常用于在 package.json 中更新项目的版本号,并且可以自动生成 Git 提交和标签。它通常与版本控制和发布流程结合使用,确保项目的版本号始终符合语义化版本(Semantic Versioning,SemVer)规范。
bash
# 更新 package.json 当前项目的version,例如 npm version 1.2.3
npm version <newversion>
# 小更新(1.0.0 → 1.0.1)
npm version patch
# 次要更新(1.0.0 → 1.1.0)
npm version minor
# 大更新(1.0.0 → 2.0.0)
npm version major
查看已安装的包
bash
# 查询当前项目安装的所有包
npm list
# 查询当前项目某一个包
npm list <package>
# 查询全局安装的包
npm list -g
# 仅查询顶层安装的包(不显示依赖的依赖)
npm list --depth=0
清除缓存和修复
bash
# 清除 npm 缓存(强制刷新)
npm cache clean --force
# 验证 npm 缓存完整性
npm cache verify
# 检查项目的安全性漏洞
npm audit
# 自动修复安全性问题
npm audit fix
# 重新编译 node_modules ,修复损坏的依赖
npm rebuild
# 检查 npm 是否正常,诊断问题
npm doctor
# 删除 node_modules 目录
rd /s /q node_modules
# 移除未列在 package.json 中的依赖
npm prune
package.json 相关
bash
# 初始化一个 package.json 文件(交互模式,填写项目名称、版本、作者等信息)
npm init
# 初始化一个 package.json 文件(交互信息使用默认值)
npm init -y
# 设置 package.json 中的某个值
npm pkg set <key>=<value>
# 删除 package.json 中的某个键
npm pkg delete <key>
# 获取 package.json 里的某个值
npm pkg get <key>
列举常用的一些key,如下:
bash
# name 设置或更新项目的名称
npm pkg set name=my-project
# version 设置或更新项目的版本号
npm pkg set version=1.0.0
# author 设置或更新项目的作者信息
npm pkg set author="Zhang San"
# engines 设置或更新项目所需的 Node.js 版本。
npm pkg set engines.node=">=12.0.0"
# description 设置或更新项目的描述
npm pkg set description="A cool project"
# main 设置项目的入口文件(通常是 index.js)
npm pkg set main=src/index.js
# keywords 设置或更新项目的关键字,这些关键字有助于别人通过 npm 搜索到你的包
npm pkg set keywords=["node", "npm", "package"]
# scripts 设置或更新 scripts 字段,用于定义 npm 命令(例如 npm run start)
npm pkg set scripts.start="node app.js"
# dependencies 设置或更新项目的生产依赖
npm pkg set dependencies.lodash="^4.17.21"
# devDependencies 设置或更新项目的开发依赖
npm pkg set devDependencies.webpack="^5.0.0"
# license 设置或更新项目的许可证
npm pkg set license=MIT
# repository 设置或更新项目的版本控制仓库信息(如 GitHub)
npm pkg set repository.type=git
npm pkg set repository.url=https://github.com/user/my-project.git
# bugs 设置或更新项目的错误报告 URL
npm pkg set bugs.url=https://github.com/user/my-project/issues
# homepage 设置或更新项目的主页 URL
npm pkg set homepage=https://my-project.com
# private 设置或更新项目是否为私有包。如果为 true,npm 将禁止发布该包。
npm pkg set private=true
# directories 设置或更新项目的目录结构信息,如 bin、lib、man 等
npm pkg set directories.lib=src/lib
运行命令脚本
scripts 示例
bash
{
"name": "node-app",
"version": "1.0.0",
"scripts": {
"start": "node app.js", // 启动应用
"dev": "nodemon app.js", // 启动应用并使用 nodemon 热重载
"test": "mocha tests/**/*.test.js", // 运行 Mocha 测试
"lint": "eslint .", // 运行 ESLint 代码检查
"build": "webpack --config webpack.config.js", // 构建项目(如使用 Webpack)
"clean": "rimraf dist", // 清理构建目录
"deploy": "npm run build && npm run start", // 构建并启动生产环境
"aaa": "自定义命令a",
"bbb": "自定义命令b"
}
}
可以使用 npm run <script> 命令执行 scripts 里面的任何变量,例如:scripts 里面的 start、dev、test、aaa、bbb等。
bash
# 执行 package.json 文件中的 scripts.start 脚本。run可以省略 npm start
npm run start
# 执行 package.json 文件中的 scripts.dev脚本。run可以省略 npm dev
npm run dev
# 执行 package.json 文件中的 scripts.aaa脚本。run可以省略 npm aaa
npm run aaa
全局配置
bash
# 查看当前 npm 配置
npm config list
# 查看某个配置项,如 npm config get registry
npm config get <key>
# 设置 npm 配置项,如 npm config set registry https://registry.npmjs.org/
npm config set <key> <value>
# 删除某个 npm 配置项
npm config delete <key>
# 直接编辑 npm 配置文件
npm config edit
# 修复 npm 配置中的错误
npm config fix
列举常用的一些key,如下:
bash
# 全局包的安装目录
prefix
# npm 缓存目录,默认 ~/.npm
cache
# 是否安装全局包,默认 false
global
# npm 源地址,默认 https://registry.npmjs.org/
registry
# 是否安装精确版本(不使用 ^ 或 ~),默认 false
save-exact
# 是否强制匹配 package.json 中的 engines 版本,默认 false
engine-strict
# 是否启用 package-lock.json,默认 true
package-lock
# 是否严格安装 peerDependencies,默认 false
strict-peer-deps
# HTTP 代理,默认无
proxy
# HTTPS 代理,默认无
https-proxy
# 是否启用 SSL 验证,默认 true
strict-ssl
# 指定 CA 证书路径,默认无
cafile
# 是否对每个请求都进行身份验证
always-auth
# 认证类型,如 legacy 或 oauth
auth-type
# Base64 编码的用户名和密码
_auth
# 使用 npm login 获取的身份验证令牌
_authToken
# 设置 npm 日志级别 (silent, error, warn, http, info, verbose, silly),默认 warn
loglevel
# 是否启用 npm audit 进行安全检查,默认 true
audit
# 是否在 npm install 后显示资金信息(开源项目接受资金捐助),默认 true
fund
npm 包发布相关
bash
# 登录 npm 账户
npm login
# 退出 npm 账户
npm logout
# 查看当前 npm 账户
npm whoami
# 发布 npm 包(需要登录 npm 账户)
npm publish
# 撤销已发布的 npm 包(24 小时内有效)
npm unpublish <package>
代理(Proxy)相关
如果你在公司或某些网络环境下无法访问
npm
,可以配置代理。
bash
# 设置 HTTP 代理
npm config set proxy http://your.proxyIP.com:8080
# 设置 HTTPS 代理
npm config set https-proxy http://your.proxyIP.com:443
# 删除 HTTP 代理
npm config delete proxy
# 删除 HTTPS 代理
npm config delete https-proxy
npm 仓库镜像源
bash
# 还原到官方 npm 仓库
npm config set registry https://registry.npmjs.org/
# 切换到淘宝镜像(国内用户推荐,相当于使用 cnpm)
npm config set registry https://registry.npmmirror.com/
# 登录到私有 npm 仓库
npm login --registry <URL>
# 发布包到私有 npm 仓库
npm publish --registry <URL>
配置 cnpm
cnpm(China npm)是淘宝团队提供的一个 npm 镜像,它是官方 npm(https://registry.npmjs.org/)的一个国内镜像,专门为国内开发者提供更快的 npm 包下载服务。
由于 npm 官方服务器在国外,国内访问可能会遇到网络问题(比如下载慢、连接超时等),而 cnpm 通过镜像同步了 npm 官方仓库的大部分包,并提供了加速下载的能力。
安装 cnpm
bash
npm install -g cnpm
使用方法同 npm 一样。
cnpm:淘宝镜像源
npm:官方镜像源
使用 cnpm 相当于 使用 npm 时镜像源是淘宝镜像。如果想使用官方镜像,使用 npm 就行了,两个同时存在不影响。