NPM

NPM 安装命令与版本控制

掌握 npm install、npm uninstall、npm update 的用法,理解语义化版本范围和 lock 文件的作用。

🎯 引言

学会这篇文章,你将掌握 NPM 最常用的安装、卸载、更新命令,理解版本号前面的 ^~ 到底是什么意思,并能根据项目需求选择合适的版本控制策略。


🧱 npm install 的基本用法

npm install 是 NPM 最常用的命令,用来安装项目依赖。根据场景不同,它有以下几种常见写法:

安装项目全部依赖

当你从仓库拉下一个项目,第一件事通常是:

npm install

NPM 会读取 package.json 中的 dependenciesdevDependencies,把所有依赖下载到 node_modules 中。

安装指定包

npm install dayjs
npm install dayjs@1.11.13
npm install dayjs@latest
  • 不写版本号:安装符合 package.json 要求的最新版本。
  • @版本号:安装指定版本。
  • @latest:安装最新发布版本。
在生产环境中,建议明确写出依赖版本号,避免自动升级到不兼容的新版本。

安装到不同依赖字段

npm install axios                # 安装到 dependencies
npm install eslint -D            # 安装到 devDependencies
npm install typescript -O        # 安装到 optionalDependencies
参数全称写入字段
dependencies
-D--save-devdevDependencies
-O--save-optionaloptionalDependencies
-g--global全局安装,不写入 package.json

⚡ 全局安装

有些工具我们不希望只在某个项目里用,而是想在任何目录下都能调用,比如 http-servercreate-vite

npm install http-server -g
npm install create-vite -g

全局安装后,你可以在任意目录直接运行:

http-server
全局安装的包不会写入当前项目的 package.json。如果项目是团队协作的,优先把工具安装到 devDependencies,这样大家都能保持版本一致。

🗑 卸载与更新依赖

卸载依赖

npm uninstall dayjs

执行后,NPM 会删除 node_modules 中的包,并同时从 package.json 中移除对应记录。

更新依赖

npm update dayjs
npm update
  • npm update dayjs:只更新指定包。
  • npm update:更新所有符合版本范围的包。
npm update 只会更新到 package.json 中版本号允许的范围。比如 ^1.11.13 最多更新到 1.x.x,不会跳到 2.0.0

⚖️ 版本号规则详解

package.json 里的版本号通常带有一些特殊符号,常见写法如下:

写法含义示例
1.2.3固定版本只安装 1.2.3
^1.2.3兼容 1.x 最新可更新到 1.9.0,不能到 2.0.0
~1.2.3兼容 1.2.x 最新可更新到 1.2.9,不能到 1.3.0
>=1.2.3大于等于 1.2.3可安装更高版本
*任意版本不推荐,容易引入破坏性更新

版本范围写法组合

package.json
{
    "dependencies": {
        "vue": "^3.5.0",
        "lodash": "~4.17.21",
        "dayjs": "1.11.13"
    }
}
尽量不用 * 或不写版本号,这会导致每次安装可能拿到不同版本,造成“我电脑上能跑,你电脑上报错”的问题。

💡 查看已安装版本

如果你想知道自己装了什么版本,可以执行:

npm list
npm list --depth=0

--depth=0 表示只显示当前项目的直接依赖,不显示依赖的依赖,看起来更清爽。


🧾 小节总结

  • npm install 可安装全部依赖或指定包,-D 表示开发依赖,-g 表示全局安装。
  • npm uninstall 包名 卸载包并从 package.json 中移除。
  • npm update 在版本号允许的范围内更新依赖。
  • ^~、固定版本分别代表不同的更新策略,选择时要权衡安全性和灵活性。

❓ 知识问答

Q1:npm installnpm install 包名 有什么区别?

A:npm install 会安装 package.json 中列出的所有依赖;npm install 包名 会安装指定包,并把它添加到 dependencies

Q2:^~ 哪个更严格?

A:~ 更严格。~1.2.3 只允许更新修订号,^1.2.3 允许更新次版本。

Q3:全局安装和本地安装有什么区别?

A:全局安装可以在任意目录使用命令,但不写入 package.json;本地安装只作用于当前项目,能被 package.json 记录,方便团队协作。

Q4:为什么有时候 npm install 很慢?

A:因为 NPM 默认从国外服务器下载包。下节课我们会学习如何切换国内镜像源来加速。


🧪 小练习

  1. 在你的 npm-demo 项目中,安装 axios@1.7.9dependencies
# 请在这里输入命令
  1. 安装 nodemondevDependencies
# 请在这里输入命令
  1. 执行 npm list --depth=0,观察直接依赖列表。
  2. 尝试卸载 nodemon,并确认 package.json 中已移除。

🎉 恭喜你掌握了 NPM 的安装、卸载和版本控制!下一篇我们会学习 npm scriptsnpx,让你的命令行操作更加高效。