Node.js包管理工具npm

目录

[什么是 npm](#什么是 npm)

[npm 主要功能](#npm 主要功能)

[安装配置 npm 环境](#安装配置 npm 环境)

[package.json 版本范围规则](#package.json 版本范围规则)

[使用 npm](#使用 npm)

[npm 版本和帮助命令](#npm 版本和帮助命令)

[npm 包相关命令](#npm 包相关命令)

安装包

卸载包

升级第三方包

升级自己开发的包

查看已安装的包

清除缓存和修复

[package.json 相关](#package.json 相关)

运行命令脚本

全局配置

[npm 包发布相关](#npm 包发布相关)

代理(Proxy)相关

[npm 仓库镜像源](#npm 仓库镜像源)

[配置 cnpm](#配置 cnpm)


什么是 npm

npm(Node Package Manager)是 Node.js 的官方包管理工具。它用于管理 JavaScript 包和模块,尤其是针对 Node.js 环境下的应用程序。npm 使开发者能够轻松地安装、共享和更新 JavaScript 代码包或库。

npm 主要功能

  1. 安装依赖包:npm 让你能够方便地第三方安装库(比如express),把lodash它们react作为项目的依赖项。
  2. 管理依赖:它帮助您管理项目中所有的依赖项,并确保版本的一致性,避免出现不同开发环境中版本不兼容的情况。
  3. 分享和发布包:你可以将自己编写的代码压缩成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 就行了,两个同时存在不影响。

相关推荐
難釋懷2 小时前
初识 Node.js
node.js
小林rr2 小时前
Node.JS 版本管理工具 Fnm 安装及配置(Windows)
windows·node.js
dgiij8 小时前
调用腾讯云批量文本翻译API翻译srt字幕
node.js·腾讯云·机器翻译
程序员小续10 小时前
Node.js学习指南
开发语言·前端·javascript·node.js·ecmascript·es6
#岩王爷12 小时前
node.js使用mysql2对接数据库
数据库·node.js
m0_7482466114 小时前
2024最新版Node.js详细安装教程(含npm配置淘宝最新镜像地址)
前端·npm·node.js
Arnold-FY-Chen14 小时前
Ubuntu下npm运行报错Error: Cannot find module ‘node:path‘
npm·node·path
哟哟耶耶15 小时前
npm-npm ERR! missing script: serve
前端·npm·node.js
李游Leo1 天前
M系列/Mac安装配置Node.js全栈开发环境(nvm+npm+yarn)
macos·npm·node.js