NPM 安装完全指南:从入门到精通
第一部分基础入门篇第一章认识 NPM1.1 什么是 NPMNPMNode Package Manager是 Node.js 的默认包管理器。它不仅仅是人们常说的“依赖安装工具”更是世界上最大的开源软件注册表拥有超过数百万个包Package。核心功能安装与卸载轻松安装或移除项目所需的第三方代码。版本管理精确控制项目依赖的版本避免因版本更新导致的项目崩溃。脚本运行通过npm scripts自动化构建、测试、启动等任务。包发布将自己写的模块发布到 NPM 仓库供全世界开发者使用。1.2 安装 Node.js 和 NPMNPM 是随 Node.js 一起分发的因此安装 Node.js 是第一步。下载与安装访问 Node.js 官网下载 LTS长期支持版安装包根据操作系统指引进行安装。验证安装打开终端Terminal或命令提示符CMD输入以下命令检查版本号bashnode -v # 输出示例v18.17.0 npm -v # 输出示例9.6.7如果能看到版本号说明安装成功。第二章项目初始化与第一个包2.1 初始化项目npm init每个使用 NPM 管理的项目都需要一个package.json文件它是项目的“身份证”和配置清单。交互式创建bashnpm init根据提示输入项目名称、版本、描述、入口文件等信息。快速创建默认值bashnpm init -y或者bashnpm init --force这会直接生成一个包含默认配置的package.json文件。2.2 安装第一个包npm install本地安装将包下载到当前项目根目录下的node_modules文件夹中。bashnpm install lodash这会将 lodash 安装并自动记录到package.json的dependencies字段中。安装开发依赖有些包只在开发时使用如测试框架 Jest、代码格式化工具 Prettier不会在生产环境运行。bashnpm install --save-dev jest # 或简写 npm i -D jest这会将包记录到devDependencies字段。全局安装如果你需要的是一个命令行工具如create-react-app而不是项目代码依赖可以全局安装。bashnpm install -g create-react-app全局安装的包通常存放在系统的特定目录如/usr/local/lib/node_modules或C:\Users\用户名\AppData\Roaming\npm\node_modules不会在某个具体项目的node_modules中。第三章理解项目结构3.1node_modules这是存放所有已安装包的文件夹。由于体积巨大且可以通过package.json重建此文件夹永远不会被提交到 Git 仓库需要在.gitignore中忽略它。3.2package.json项目的核心配置文件。它包含了项目元数据名称、版本、作者等以及依赖列表。json{ name: my-project, version: 1.0.0, description: 一个示例项目, main: index.js, scripts: { test: echo \Error: no test specified\ exit 1 }, dependencies: { lodash: ^4.17.21 }, devDependencies: { jest: ^29.0.0 } }3.3package-lock.json这是一个自动生成的文件。它精确记录了node_modules中每一个包的来源、版本号以及依赖树结构。它的作用是锁定依赖确保团队中每个人以及 CI/CD 服务器安装的依赖版本完全一致。重要必须将此文件提交到 Git 仓库。第二部分核心概念与进阶操作篇第四章深入依赖管理4.1 语义化版本控制SemVerNPM 中的版本号遵循主版本号.次版本号.修订号的规则 主版本号当做了不兼容的 API 修改。次版本号当做了向下兼容的功能性新增。修订号当做了向下兼容的问题修正。在package.json中我们通常使用符号来指定可接受的版本范围符号示例含义^^1.2.3允许次版本号和修订号变更。只要主版本号是1最新版是1.x.x就可以即锁定最左边第一个非零版本。~~1.2.3只允许修订号变更。只要主次版本是1.2.x就可以。无1.2.3精确版本。必须安装1.2.3。******安装最新版本。1.2.3 2.0.0指定范围。4.2 安装特定版本bashnpm install lodash4.17.20 # 安装指定版本 npm install lodash^4.0.0 # 安装符合范围的最新版 npm install lodashlatest # 安装 latest 标签指向的版本4.3 依赖类型详解在package.json中依赖可以存放在不同的字段中dependencies生产依赖。项目运行必需的包如 React, Vue, Express。devDependencies开发依赖。开发过程中需要的工具如 Webpack, Babel, ESLint。peerDependencies对等依赖。通常用于开发插件或库时提示宿主环境需要安装哪些核心包。例如一个 Vue 插件需要宿主项目有 Vue 才能工作。optionalDependencies可选依赖。即使安装失败NPM 也认为整个安装过程是成功的。如果程序能优雅地处理缺失情况可以使用。bundledDependencies打包依赖。在发布包时会一起打包进去的依赖数组。第五章NPM Scripts 自动化scripts字段是package.json中最强大的功能之一它允许你定义和运行自定义脚本命令。5.1 基本用法json{ scripts: { start: node server.js, build: webpack --mode production, dev: webpack serve --mode development, lint: eslint src/ } }执行脚本bashnpm run dev npm run build # 对于 start 和 test 等常用命令可以省略 run npm start npm test5.2 脚本钩子HooksNPM 会自动执行带有特定前缀的脚本 pre钩子在指定命令之前运行。post钩子在指定命令之后运行。示例json{ scripts: { prebuild: rimraf dist, build: webpack --mode production, postbuild: echo 构建完成 } }运行npm run build时三个命令会依次执行。5.3 环境变量在 Script 中可以访问package.json中的字段作为环境变量。例如npm_package_version代表当前版本号。在 Script 中可以使用$npm_package_versionMac/Linux或%npm_package_version%Windows来获取版本号。第六章深入理解package-lock.json6.1 为什么需要 Lock 文件假设项目依赖lodash在package.json中写的是^4.17.20。当团队成员在不同时间运行npm install时开发者 A 今天安装lodash 最新版本是4.17.21。开发者 B 下个月安装lodash 发布了4.17.22包含一个小 bug 修复。由于^允许更新次版本两人安装的实际版本可能不同导致“在我电脑上是好的”问题。package-lock.json就是为了解决这个问题。它锁定了当时安装的确切版本和整个依赖树。6.2npm install与npm cinpm install如果有package-lock.json会对比package.json。如果 lock 中的版本满足package.json的范围则使用 lock 中的版本如果不满足会更新 lock 文件。会检查并安装可能缺失的包。npm ci专为 CI持续集成环境设计。必须存在package-lock.json否则会报错。严格根据 lock 文件安装不会修改 lock 文件。会删除现有的node_modules文件夹然后重新安装确保绝对的干净和确定性。速度通常比npm install快。结论本地开发用npm installCI/CD 流水线上永远用npm ci。第七章NPM 配置与镜像7.1 NPM 配置文件.npmrcNPM 的行为可以通过配置文件进行修改。配置层级从高到低为项目级项目根目录下的.npmrc。用户级~/.npmrc用户主目录下。全局级$PREFIX/etc/npmrc。内置NPM 自带的配置。查看当前配置bashnpm config list7.2 配置镜像源Registry在中国大陆直接连接 NPM 官方源https://registry.npmjs.org/通常速度很慢可以切换至淘宝镜像源。临时使用bashnpm install lodash --registryhttps://registry.npmmirror.com永久设置bashnpm config set registry https://registry.npmmirror.com使用工具管理可以使用nrm(NPM Registry Manager) 轻松切换源。bashnpm install -g nrm npx nrm ls # 列出所有源 npx nrm use taobao # 使用淘宝源 npx nrm use npm # 切回官方源第三部分高级技巧与工程化篇第八章高级安装与调试8.1 安装非 Registry 包NPM 不仅能从 Registry 安装还能从多种来源安装从 Git 仓库安装bash# 直接从 GitHub 主分支安装 npm install github:username/repo # 或指定 commit id 或 tag npm install githttps://github.com/username/repo.git#v1.0.0 npm install gitssh://gitgithub.com:username/repo.git#develop从本地文件系统安装bash# 安装本地压缩包 npm install ./path/to/package.tgz # 创建符号链接到本地包用于调试 npm link ../my-local-package安装别名包允许在同一项目中安装同一个包的不同版本或给长名字包起别名。bashnpm install jquery2npm:jquery2 npm install jquery3npm:jquery3 npm install my-reactnpm:react8.2 排查依赖问题npm explain当你想知道为什么某个包会被安装或者是谁依赖了它时bashnpm explain lodash # 输出lodash4.17.21 # 作用devDependencies中的项目依赖了它 # 也有来自 webpack - babel 的间接依赖8.3 本地调试npm link当你在开发一个库比如my-ui-lib并想在另一个本地项目比如my-app中实时测试修改时npm link非常有用。在库项目my-ui-lib中bashcd my-ui-lib npm link这会在全局node_modules中创建一个指向my-ui-lib的符号链接。在应用项目my-app中bashcd my-app npm link my-ui-lib这会在my-app的node_modules中创建一个指向全局链接的符号链接。修改my-ui-lib的代码my-app中会立即生效需支持热更新。解除链接bashcd my-app npm unlink --no-save my-ui-lib cd ../my-ui-lib npm unlink第九章安全与维护9.1 安全审计npm audit随着项目依赖增多安全问题不容忽视。检查漏洞bashnpm audit自动修复bashnpm audit fix它会尝试自动更新到兼容的、修复了漏洞的版本。如果不行可以用npm audit fix --force强制升级可能需要手动测试破坏性变更。9.2 检查过期依赖npm outdated查看哪些包有新版本发布bashnpm outdated它会列出当前版本Current、想要版本Wanted符合package.json范围的最新版和最新版本Latest。9.3 更新依赖小版本更新bashnpm update lodash这会在满足package.json范围的前提下更新到最新版并更新package-lock.json。大版本更新需要手动安装bashnpm install lodashlatest第十章发布自己的 NPM 包10.1 准备工作注册账号在 npmjs.com 注册。登录在终端登录。bashnpm login输入用户名、密码和邮箱。10.2 创建并发布创建项目bashmkdir my-awesome-lib cd my-awesome-lib npm init -y编写代码例如index.jsjavascriptmodule.exports function() { console.log(Hello from my awesome lib!); };添加.npmignore类似于.gitignore用于指定哪些文件不发布。如果不写NPM 会使用.gitignore的规则。发布bashnpm publish10.3 管理版本发布新版本前必须更新版本号。bashnpm version patch # 1.0.0 - 1.0.1 (修复 bug) npm version minor # 1.0.1 - 1.1.0 (新增功能) npm version major # 1.1.0 - 2.0.0 (破坏性变更) npm publish10.4 作用域包与私有包作用域包格式为username/package-name。默认是公开的。bashnpm init --scopeusername npm publish --access public私有包需要付费账户发布时指定访问权限。bashnpm publish --access restricted第十一章NPM 生态系统与替代工具11.1 NPM 与 Yarn 对比Yarn 是 Facebook 推出的另一款包管理器与 NPM 类似但有自己的特点特性NPMYarn锁文件package-lock.jsonyarn.lock安装速度较慢现 v7 有改进较快并行安装Workspaces支持v7原生支持良好命令npm installyarn add11.2 新兴工具pnpm核心原理使用内容可寻址存储。如果你有 10 个项目都依赖同一个版本的lodashpnpm只在全局存储一份然后通过硬链接的方式引入项目。这极大地节省了磁盘空间并且安装速度飞快。11.3 极速工具Bun特点Bun 不仅仅是一个包管理器还是一个 JavaScript 运行时类似于 Node.js、打包器、测试运行器。它由 Zig 语言编写启动速度和安装速度都非常快。第四部分最佳实践与排错指南第十二章工程化最佳实践12.1 依赖管理精确控制对于核心依赖建议使用精确版本--save-exact或认真对待^和~的选择。bashnpm install react --save-exact最小化依赖引入一个包前思考能否用几行代码自己实现依赖越多安全风险和安装体积越大。定期维护养成习惯每月或每季度运行一次npm outdated和npm audit保持项目健康。12.2 Lock 文件策略务必提交package-lock.json必须提交到 Git。这是团队协作和生产环境构建稳定性的基石。解决冲突当package-lock.json在合并分支时发生冲突最简单的方法是重新生成bash# 接受所有更改然后重新安装 git checkout --ours package.json # 或者 --theirs npm install12.3 环境隔离避免全局安装尽量不要全局安装项目依赖。团队中如果有人忘记全局安装某个工具项目就会运行失败。项目依赖都应写在devDependencies中并通过npx运行。npx会先查找项目node_modules中的命令找不到再去全局找。例如npx webpack --version会优先使用项目中的 webpack。第十三章常见错误与解决方案13.1 安装慢或卡住原因访问官方源网络不稳定。解决切换淘宝镜像源 。bashnpm config set registry https://registry.npmmirror.com13.2 权限错误EACCES原因在 Linux/Mac 上试图用普通用户权限全局安装包。解决推荐使用 Node 版本管理器如nvm重装 Node它会将全局路径设在用户目录下。不推荐使用sudo npm install -g package可能带来安全问题。手动修改 npm 全局目录权限。13.3 依赖版本冲突ERESOLVE原因项目中不同包依赖了同一个包但版本不兼容。NPM v7 对peerDependencies的检查更严格会报错。解决使用--legacy-peer-deps命令降级到 v6 的处理方式忽略对等依赖冲突作为临时方案。更根本的解决分析依赖树npm explain package手动安装一个能兼容的版本或升级/降级相关依赖。13.4 幽灵依赖Phantom Dependency原因你引用了package.json中没有声明的包但它存在于node_modules中因为它是其他包依赖的。当那个包升级去掉了该依赖时你的代码就会报错。解决使用包管理器的最新特性如 pnpm 的严格模式。使用工具如dependency-cruiser检查项目中是否有未声明的依赖。第十四章总结NPM 已经从一个简单的包安装器演变成了现代 JavaScript 开发的核心基础设施。掌握 NPM 不仅仅是记住npm install而是理解其依赖解析算法、版本控制哲学以及它在工程化流程中的定位。

相关新闻

3步搞定E-Hentai漫画下载:开源工具完全指南

3步搞定E-Hentai漫画下载:开源工具完全指南

3步搞定E-Hentai漫画下载:开源工具完全指南 E-Hentai Downloader是一款开源的用户脚本工具,专门用于从E-Hentai网站下载漫画档案并打包成ZIP文件。无需消耗网站积分,通过浏览器扩展即可直接下载漫画资源,为漫画爱好者提供了便捷的…

2026/7/4 4:58:22阅读更多 →
Kotlin安卓app版本自动升级设计实现

Kotlin安卓app版本自动升级设计实现

序: app项目上线后需要持续发版迭代,通过版本控制自动升级(或者说当app启动时,自动检测有最新版本,自动安装升级)就显得尤为重要,那么接下来设计具体如何落地,可以加我底部wx交流ga…

2026/7/4 4:53:22阅读更多 →
[DeepAgents:LangChain的Harness-04]TodoListMiddleware的任务拆解与状态流转

[DeepAgents:LangChain的Harness-04]TodoListMiddleware的任务拆解与状态流转

TodoListMiddleware赋予Agent显式的规划和任务跟踪能力。它强制Agent将复杂的多步骤目标分解为一组结构化的可执行项,从而将被动型Agent转变为主动型Agent。它通过拦截Agent的推理循环来注入规划逻辑和工具: 规划工具:它为Agent提供了write_t…

2026/7/4 4:53:22阅读更多 →
为什么选择Slopsmith-Desktop?音乐创作者的一站式记谱与音频处理解决方案

为什么选择Slopsmith-Desktop?音乐创作者的一站式记谱与音频处理解决方案

为什么选择Slopsmith-Desktop?音乐创作者的一站式记谱与音频处理解决方案 【免费下载链接】slopsmith-desktop Cross-platform desktop app for interactive full-band music notation — built-in VST hosting, amp modeling (NAM), and low-latency audio I/O 项…

2026/7/4 6:23:30阅读更多 →
Instatic数据库连接管理:连接池配置与监控终极指南

Instatic数据库连接管理:连接池配置与监控终极指南

Instatic数据库连接管理:连接池配置与监控终极指南 【免费下载链接】Instatic Instatic is a modern self-hosted visual CMS - get it running in 1 minute 项目地址: https://gitcode.com/GitHub_Trending/in/Instatic Instatic作为一款现代化的自托管可视…

2026/7/4 6:23:30阅读更多 →
Flutter游戏本地化与国际化:支持多语言游戏开发的完整指南

Flutter游戏本地化与国际化:支持多语言游戏开发的完整指南

Flutter游戏本地化与国际化:支持多语言游戏开发的完整指南 【免费下载链接】games Home of the Flutter Casual Games Toolkit and other Flutter gaming templates 项目地址: https://gitcode.com/gh_mirrors/games8/games 在全球化游戏市场中,支…

2026/7/4 6:23:30阅读更多 →
终极炉石传说插件:HsMod新手完全指南

终极炉石传说插件:HsMod新手完全指南

终极炉石传说插件:HsMod新手完全指南 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx框架开发的炉石传说功能增强插件,为玩家提供超过50项实…

2026/7/4 6:23:30阅读更多 →
QtAutoUpdater安全最佳实践:保护你的应用更新过程

QtAutoUpdater安全最佳实践:保护你的应用更新过程

QtAutoUpdater安全最佳实践:保护你的应用更新过程 【免费下载链接】QtAutoUpdater A Qt library to automatically check for updates and install them 项目地址: https://gitcode.com/gh_mirrors/qt/QtAutoUpdater QtAutoUpdater是一个强大的Qt库&#xff…

2026/7/4 6:23:30阅读更多 →
httpcache:Go语言中RFC 7234兼容的HTTP缓存传输器完全指南

httpcache:Go语言中RFC 7234兼容的HTTP缓存传输器完全指南

httpcache:Go语言中RFC 7234兼容的HTTP缓存传输器完全指南 【免费下载链接】httpcache A Transport for http.Client that will cache responses according to the HTTP RFC 项目地址: https://gitcode.com/gh_mirrors/ht/httpcache 在Go语言开发中&#xff…

2026/7/4 6:18:30阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/3 14:18:39阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/3 14:38:35阅读更多 →
端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

1. 项目概述:当算法工程师走进GTC26展厅,看到的不是芯片,而是“端到端”的呼吸节奏“端到端”这三个字,在GTC’26现场出现的频率,高得像NVLink带宽测试时的峰值曲线——它不再是一个论文里的技术路径选项,而…

2026/7/4 0:02:48阅读更多 →
缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考牙齿缺失是中老年人群中较为常见的口腔问题,不仅会造成咀嚼不便、进食受影响,长期还可能对营养摄入与日常社交带来困扰。义齿是改善缺牙问题的常用方式,目前市面上的义齿种类较多,…

2026/7/4 0:02:48阅读更多 →
STM32F091RC与LTC6904实现高精度方波信号生成

STM32F091RC与LTC6904实现高精度方波信号生成

1. 项目概述:LTC6904与STM32F091RC的精准方波生成方案在嵌入式系统开发中,精确的时钟信号和定时控制往往是项目成败的关键。LTC6904作为一款低功耗、高精度的可编程振荡器芯片,与STM32F091RC这款ARM Cortex-M0内核微控制器的组合,…

2026/7/4 0:02:48阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/4 1:16:56阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/4 2:33:55阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/4 2:33:55阅读更多 →