npm命令详解

牛逼视频:www.bilibili.com/video/BV1Nx...

1. 什么是 npm?

npm 有两层含义:

  1. 一个在线仓库:全球最大的开源 JavaScript 代码库,开发者可以分享和借用各种代码包(package)。
  2. 一个命令行工具:Node.js 的默认包管理器,用于与这个在线仓库交互,帮助你安装、管理项目依赖。

当你安装 Node.js 时,npm 会自动被一起安装。


2. 核心概念

  • package.json:项目的"身份证"和"菜单",记录了项目名称、版本、依赖包等信息。它是 npm 操作的核心。
  • node_modules:一个文件夹,所有通过 npm 安装的包及其依赖都会存放在这里。通常不需要手动修改,也不应该提交到版本控制系统(如 Git)。
  • package-lock.json 或 npm-shrinkwrap.json :精确描述当前安装的依赖树版本,确保团队协作和部署时安装完全一致的包。建议提交到版本库。

3. npm 命令详解(按功能分类)

A. 项目初始化与配置

命令 功能 示例与说明
npm init 交互式地创建一个新的 package.json 文件。 npm init
npm init -y / --yes 使用默认值快速创建 package.json,跳过所有提问。 npm init -y
npm config 管理 npm 的配置。 - npm config list:查看当前配置 - npm config set <key> <value>:设置配置,如 npm config set registry https://registry.npmmirror.com(设置淘宝镜像) - npm config get <key>:获取配置

B. 包(依赖)的安装

这是 npm 最核心的功能。依赖分为两种:

  • 生产依赖 :项目运行时必须的包(如 react, express),会出现在 dependencies 字段。
  • 开发依赖 :仅在开发阶段需要的包(如 webpack, eslint, jest),会出现在 devDependencies 字段。
命令 功能 示例与说明
npm install (或 npm i) 根据 package.json 安装所有依赖。 在项目根目录执行,会创建 node_modules 并安装所有 dependencies 和 devDependencies。
npm install <package_name> 安装一个包,并自动添加到 package.json 的 dependencies。 npm install lodash
npm install <package_name> --save-dev (或 -D) 安装一个包,并添加到 package.json 的 devDependencies。 npm install eslint --save-dev
npm install <package_name> --global (或 -g) 全局安装一个包(通常是命令行工具)。 npm install @vue/cli -g(之后可以在任何地方使用 vue 命令)
npm install <package_name>@<version> 安装指定版本的包。 npm install react@18.2.0
npm install <package_name>@latest 安装包的最新版本。 npm install webpack@latest
npm ci 清洁安装 ,用于自动化环境(如 CI/CD)。它依赖 package-lock.json,安装速度更快、更严格,但不会更新锁文件。 npm ci

C. 依赖管理与更新

命令 功能 示例与说明
npm update 更新所有包到 package.json 中允许的最新版本(遵循语义化版本规则)。 npm update
npm update <package_name> 更新指定的包。 npm update lodash
npm outdated 检查有哪些过时的包。 会列出当前版本、期望版本和最新版本。
npm uninstall <package_name> (或 npm un) 卸载一个包,并从 package.json 中移除。 npm uninstall lodash
npm uninstall <package_name> --save-dev 卸载一个开发依赖包。 npm uninstall eslint --save-dev

D. 运行脚本

package.json 中有一个 "scripts" 字段,可以定义自定义命令。

命令 功能 示例与说明
npm run <script_name> 运行在 package.json 的 scripts 中定义的脚本。 如果 scripts 中有 "start": "node app.js",则 npm run start 会执行它。
npm start npm run start 的快捷方式。 npm start
npm test (或 npm t) npm run test 的快捷方式。 npm test
npm run 列出所有可用的脚本。 npm run

E. 信息查看与审计

命令 功能 示例与说明
npm list (或 npm ls) 查看当前项目安装的包及其依赖树。 - npm list:查看顶级依赖 - npm list --depth=0:只查看直接依赖,更清晰 - npm list -g:查看全局安装的包
npm info <package_name> 查看某个包的详细信息(版本、依赖、描述等)。 npm info react
npm search <keyword> 在 npm 仓库中搜索包。 npm search http server
npm audit 安全检查,扫描项目依赖中的已知漏洞。 npm audit
npm audit fix 自动修复可自动修复的漏洞。 npm audit fix
npm audit fix --force 强制修复漏洞,可能会进行破坏性更新(大版本升级)。 npm audit fix --force
npm view <package_name> versions 查看一个包所有可用的历史版本。 npm view webpack versions

F. 发布与管理包(针对包开发者)

命令 功能 示例与说明
npm login 登录到你的 npm 账户。 npm login
npm publish 将当前目录的包发布到 npm 仓库。 在项目根目录执行,前提是已登录且有合法的 package.json。
npm version <update_type> 更新包的版本号,并自动创建一个 Git tag。 - npm version patch (小版本,如 1.0.0 -> 1.0.1) - npm version minor (次版本,如 1.0.0 -> 1.1.0) - npm version major (主版本,如 1.0.0 -> 2.0.0)
npm unpublish <package_name>@<version> 取消发布某个版本的包(有严格限制)。 npm unpublish my-package@1.0.1

4. 常用工作流示例

1. 启动一个新项目

bash

csharp 复制代码
mkdir my-new-project
cd my-new-project
npm init -y                # 快速创建 package.json
npm install express        # 安装生产依赖 express
npm install nodemon --save-dev # 安装开发依赖 nodemon

然后,在 package.json 的 scripts 中添加:

json

json 复制代码
"scripts": {
  "start": "node app.js",
  "dev": "nodemon app.js"
}

之后就可以使用 npm run dev 来启动开发服务器了。

2. 克隆并运行一个已有项目

bash

bash 复制代码
git clone <project-url>
cd <project-folder>
npm install          # 安装所有依赖
npm start            # 启动项目

3. 更新项目依赖

bash

bash 复制代码
npm outdated         # 检查哪些包过时了
npm update           # 更新所有包到允许的最新版本
npm audit            # 检查安全性
npm audit fix        # 修复漏洞

5. 实用技巧与最佳实践

  1. 使用 npx :npx 随 npm 一起安装,用于临时执行包。它无需全局安装,非常方便。

    • npx create-react-app my-app (临时下载并运行 create-react-app)
    • npx eslint . (运行项目本地安装的 eslint)
  2. 使用 .npmrc 文件:可以在项目根目录创建此文件来定义项目特定的 npm 配置,例如设置私有仓库地址。

  3. 理解语义化版本:

    • ^1.2.3:允许更新次版本和修订号,如 1.2.4, 1.3.0,但不包括 2.0.0。
    • ~1.2.3:只允许更新修订号,如 1.2.4。
    • 这就是 package-lock.json 重要的原因,它锁定了确切的版本。
  4. 不要手动修改 node_modules :任何修改都会在下次 npm install 时丢失。

  5. 将 package-lock.json 提交到 Git:这是保证团队一致性的关键。

相关推荐
Csvn11 分钟前
渲染管线
前端
程序员大阳23 分钟前
副队长CSS教程(33)–圆角与透明
前端·css·透明·圆角
志尊宝34 分钟前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
鬼手点金1 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
柳杉1 小时前
借助 Codex 和可视化工作流,从调研到完整实现,3D 大屏竟然可以这么简单
前端·ai编程·数据可视化
IMPYLH2 小时前
HTML 的 <wbr> 元素
前端·html
Dovis(誓平步青云)2 小时前
常用命令藏得太深?怎么做一个快捷命令坞
运维·前端·自动化·音视频·prometheus
IT_陈寒3 小时前
Vite的这个问题坑了我三天,原来如此解决!
前端·人工智能·后端
网易云信3 小时前
大模型能上岗做销售吗?我们让 12 款国产模型交了 420 份作业
前端·后端
蜗牛互联网3 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python