当前位置: 首页 > news >正文

npm CLI:JavaScript 世界的包管理器

文章目录

  • npm CLI:JavaScript 世界的包管理器

npm CLI:JavaScript 世界的包管理器

npm CLI 是 Node.js 官方的包管理工具,目前在 GitHub 上有 9,800+ 的 Star。做前端或者 Node.js 开发的人,基本每天都在用它,但很多人可能没怎么关注过这个项目本身。

npm 全称是 “npm is not an acronym”,一个递归缩写。它的前身是一个叫 pm 的 bash 脚本,用来在不同平台上安装东西。后来 Isaac Schlueter 在 2010 年把它重写成了 Node.js 的包管理器,再后来随着 Node.js 的流行,npm 成了 JavaScript 生态里不可缺少的基础设施。

npm 做的事情说起来很简单:帮你安装、管理 JavaScript 项目的依赖包。但实际用起来,它能做的事情远不止这些。

基本功能

安装依赖是最常用的操作。运行 npm install,它会读取项目根目录的 package.json 文件,把里面声明的所有依赖下载到 node_modules 目录下。如果项目里有 package-lock.json,npm 会严格按照里面记录的版本来安装,保证团队里每个人装出来的依赖一模一样。

发布自己的包也很方便。注册一个 npm 账号,运行 npm publish,你的代码就上了 npm 仓库,全世界的开发者都能通过 npm install 你的包名来使用。

npm 还提供了脚本运行能力。在 package.json 的 scripts 字段里定义命令,然后用 npm run 来执行。比如 npm run build、npm run test,这些在前端项目里已经是标准做法了。

版本管理

npm 使用语义化版本号,格式是 major.minor.patch。比如 1.2.3,1 是主版本号,2 是次版本号,3 是补丁版本号。在 package.json 里写依赖的时候,可以用 ^、~ 这些符号来控制版本范围。^1.2.3 表示可以升级到 1.x.x 的最新版本,~1.2.3 表示只能升级到 1.2.x 的最新版本。

这个机制让依赖管理变得灵活。你不需要每次都指定精确版本,npm 会在你设定的范围内帮你找到合适的版本。

安全和审计

npm 内置了安全审计功能。运行 npm audit,它会检查项目里有没有已知漏洞的依赖包,并给出修复建议。npm audit fix 可以自动把有漏洞的包升级到安全版本。

对于企业用户,npm 还提供了私有仓库的支持。你可以用 npm config set registry 来切换到公司内部的私有 registry,或者使用 Verdaccio 这样的工具搭建本地仓库。

npx

npx 是 npm 5.2.0 之后自带的工具,用来直接运行 npm 包里的可执行文件,而不需要全局安装。比如 npx create-react-app my-app,它会临时下载 create-react-app 并执行,用完就清理掉。这个功能解决了一个老问题:全局安装的工具版本不好管理,不同项目可能需要不同版本。

配置和定制

npm 的配置项很多。可以通过 npm config set 来修改,也可以在项目根目录放一个 .npmrc 文件来做项目级别的配置。常用的配置包括设置代理、切换 registry、配置 scope 对应的 registry 等。

.npmrc 文件支持项目级、用户级、全局级三个层次,优先级从高到低。团队可以在项目里放一个 .npmrc,统一配置,避免每个人手动设置。

工作空间

npm 7 引入了 workspaces 功能,支持在一个仓库里管理多个包。这在开发大型项目或者组件库的时候很有用。你可以在根目录的 package.json 里声明 workspaces 字段,npm install 会自动把各个子包之间的依赖链接起来,不需要手动 npm link。

这个功能和 yarn workspaces 类似,是 npm 追上包管理器竞争的一个重要更新。

和 Node.js 的关系

npm 随 Node.js 一起安装。你装了 Node.js,就有了 npm。不过 npm 的更新频率比 Node.js 高得多,可以用 npm install -g npm@latest 来单独升级 npm。

需要注意的是,不同版本的 Node.js 自带的 npm 版本不同。如果你在用比较老的 Node.js,npm 的功能可能会少一些。Node.js 的官方下载页面列出了当前受支持的版本,建议使用这些版本来获得最好的体验。

npm CLI 这个项目本身是开源的,代码在 GitHub 上,任何人都可以参与贡献。项目有完善的 issue 跟踪、RFC 流程和社区讨论渠道。如果你遇到了 npm 的 bug,可以在 GitHub 上提交 issue;如果有功能建议,可以通过 RFC 仓库来提出。

对于大多数 JavaScript 开发者来说,npm 就像空气一样,用的时候不会特别注意它,但没有它寸步难行。

对于大多数 JavaScript 开发者来说,npm 就像空气一样,用的时候不会特别注意它,但没有它寸步难行。

http://www.jsqmd.com/news/1076177/

相关文章:

  • Next.js SSRF漏洞深度解析:从CVE-2026-44578看服务端请求伪造的攻防实战
  • 申请量超6.6万!小米MiMo-V2.5-Pro-UltraSpeed模型延长体验期,输出速度远超GPT-5.5
  • 荣耀定义 Agentic OS:终端将从“应用容器”走向“智能体舞台”
  • 06-LangGraph入门
  • 链博会上的英伟达:“五层蛋糕”AI 生态,多领域展现强大布局野心!
  • 【TEE从入门到精通及实战】55 密钥轮换与生命周期管理:在Enclave内实现无缝旋转
  • 我用 Claude Opus 4.8 做了一次接口评审,记录几个真正有用的 Prompt
  • 四Agent科研协作实战:Codex、Claude Code、OpenClaw、Hermes组成可迭代AI研究团队
  • 2026年6个字体素材网站推荐,设计师常用的字体资源整理
  • 终极ADB图形化管理工具:QtAdb让Android调试从未如此简单
  • V-Ray 7.20.01 for 3ds Max2020-2026 完整版安装教程|GPU 渲染性能全面升级
  • 【零基础AI应用开发】第01章:环境搭建与工具安装(入门篇)
  • PHP文件包含漏洞与Phar反序列化攻击链深度剖析与防御实践
  • 精准选对矩形导向轨,专业制造商该看哪些点
  • RAG+多智能体:金融AI分析的可验证工程实践
  • 机器学习落地闭环:从Notebook到生产环境的实战指南
  • 传统后端程序员,如何利用业余时间3-6个月转行高薪AI应用开发
  • 为什么你收藏了 100 个 Skills,也未必能用得好 AI 编程?
  • 高级 | 系统工程与信息系统基础错题集
  • GPT-3范式迁移:从微调到提示驱动的NLP革命
  • 关闭 VIP 通道(高频踩坑点)
  • 5种实战方案:如何用智能浏览器自动化重构你的工作流
  • 从“问对问题”到“建对系统”:Prompt、Context、Loop、Harness 工程的演变与理解
  • CSRF攻击原理深度解析:从身份冒用到防御实战
  • Appsmith:开源低代码平台,快速构建内部工具
  • 7个已落地AI工程方向:轻量化部署、RAG增强、多模态理解等实操指南
  • 人形机器人全身动作跟踪算法解析:从参考动作、奖励函数到真实机器人部署
  • 在长度2N的数组中找出重复N次的元素(一)
  • 多级蒙特卡洛梯度估计:原理、复杂度分析与在随机优化中的应用
  • 深圳登报声明去哪里办理?深圳登报声明要多少钱?