NPM 核心概念
理解 NPM 的工作方式,先记住三个最核心的名词:包、依赖、注册表,它们构成了 NPM 世界的骨架。
包(Package)
一个包就是一组可复用的 JavaScript 代码,通常包含:
- 源代码文件
- 一个
package.json配置文件 - 必要的说明文档
包可以是公共的(发布到 npm registry 供所有人使用),也可以是私有的(仅在团队内部使用)。你每天 npm install 装的就是一个个包。
依赖(Dependency)
你的项目用到了某个包,这个包就成了项目的依赖。依赖分两种:
- 生产依赖(
dependencies):项目运行时必须的,比如 React、Vue、lodash。 - 开发依赖(
devDependencies):仅在开发阶段需要,比如测试工具、打包工具、代码格式化工具。
{
"dependencies": {
"lodash": "^4.17.21"
},
"devDependencies": {
"vitest": "^2.0.0"
}
}
区分两者的意义在于,部署到生产环境时可以选择只安装生产依赖,从而减小体积、提升安装速度。
注册表(Registry)
npm registry 是一个公共的包数据库,存放着所有发布到 NPM 的包,默认地址是 https://registry.npmjs.org/。
你可以把它理解成 JavaScript 世界的「应用商店」——只不过这里上架的是代码包,而不是 App。当你执行 npm install lodash 时,NPM 就是去这个仓库里把 lodash 下载到本地。
NPM 的核心能力
把上面三个概念串起来,NPM 能做的事可以总结为四点:
- 依赖管理:自动下载、记录、更新依赖,并维护一棵依赖树,解决「A 依赖 B,B 依赖 C」的连锁关系。
- 脚本运行:通过
npm run执行package.json里定义的脚本,统一项目的启动、构建、测试命令。 - 版本解析:遵循语义化版本(SemVer),用
^、~等符号智能判断该装哪个版本,兼顾更新与稳定。 - 与 Node.js 深度集成:作为 Node.js 的默认包管理器,随 Node 一起安装,开箱即用。
理解了这些,后面关于 package.json、安装命令、依赖解析的篇章就都有了基础。