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.jsonnpm-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 并安装所有 dependenciesdevDependencies
npm install <package_name> 安装一个包,并自动添加到 package.jsondependencies npm install lodash
npm install <package_name> --save-dev (或 -D) 安装一个包,并添加到 package.jsondevDependencies 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.jsonscripts 中定义的脚本。 如果 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.jsonscripts 中添加:

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. 使用 npxnpx 随 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:这是保证团队一致性的关键。

相关推荐
用户47949283569152 小时前
为什么我的react项目启动后,dom上的类名里没有代码位置信息
前端·react.js
键盘飞行员2 小时前
Vue3+TypeScript项目中配置自动导入功能,遇到了问题需要详细的配置教程!
前端·typescript·vue
han_2 小时前
前端高频面试题之Vue(初、中级篇)
前端·vue.js·面试
一枚前端小能手2 小时前
📜 `<script>`脚本元素 - 从加载策略到安全性与性能的完整指南
前端·javascript
掘金安东尼2 小时前
TypeScript为何在AI时代登顶:Anders Hejlsberg 的十二年演化论
前端·javascript·面试
yong99902 小时前
MATLAB倍频转换效率分析与最佳匹配角模拟
开发语言·前端·matlab
面向星辰3 小时前
扣子开始节点和结束节点
java·服务器·前端
执携3 小时前
Vue Router (命名视图)
前端·javascript·vue.js
John_Rey3 小时前
Rust类型系统奇技淫巧:幽灵类型(PhantomData)——理解编译器与类型安全
前端·安全·rust