臭名昭著aTrust隔离计划1.臭名昭著aTrust隔离计划2.VPN原理与aTrust隔离网络实践3.docker-easyconnect到底做了什么4.TUN(tunnel-隧道-虚拟网卡)模式
基于Quartz搭建的个人博客1.Quartz个人博客使用教程2.使用 rsync 增量部署 Quartz 博客3.使用 GitHub Actions 自动部署 Quartz 博客5.域名绑定6.CDN加速Obsidian、双向链接与知识图谱
旅行
行程攻略青岛三日游行程攻略
前端
NginxNginx配置与反向代理入门
Nodenpm与npx的区别
中华财险-公司项目
对外接口文档
基础数据码表对外接口(仅支持rpc调用)业务码表对外接口应用主数据对外接口
基础运营查询版本更新日志详情消息中心对外接口站内信对外接口站内信模板配置手册
权限中心权限中心对外接口文档(最新)权限中心对外接口文档前端ACL-CORE FACADE依赖版本
审计中心审计中心对外接口文档audit-center-facade版本
审批中心工作流迁审批流现状工作流迁审批流API能力替换方案老审批流接口文档审批中心接口文档审批中心业务回调FAQ
账号中心内部系统对接单点登录内部系统对接认证中心三方网页应用登录授权账号中心对外接口文档前端账号中心RPC接口文档账户变更对外广播消息文档账户中心对外接口HRMS外部员工变更广播消息文档HRMS外部员工对外接口
组织员工岗位🔥机构映射SDK接口文档员工岗位变更通知说明组织机构管营一体概念与用法组织员工对外广播消息文档组织员工岗位对外接口文档组织员工岗位对外接口文档前端组织员工岗位数据模型组织员工主数据业务场景案例organization-facade版本
hrms(大型人力资源外包管理系统)
项目架构说明HRMS Maven模块与依赖说明
项目说明0.流程中心模块0.组织模块说明1.业务线模块2.计划模块3.项目模块4.协议模块5.供应商模块6.合约域模块7.外包人员模块*核心:外包人员生命周期
项目运维外包人员项目编制差异排查与修复2.HRMS相关问题排查4.修改externalId(externalId和accountId不一致)
需求-系分
1.内部转外包0723外包人员关联历史内部账号系分新增外包人员关联历史账号内容(紧急0723上线)需求
2.工作岗位0820工作岗位0820需求工作岗位0820需求-系分
3.用工模式调整0917内部人员转外包用工系统需求2内部人员转外包用工系统需求-系分
sso(账号中心-单点登录)
项目架构说明aboss-sso项目架构入门AOP统一日志打印链路Maven多模块项目高级知识OAuth2.0
项目说明1.SSO-OAuth2.0与IDaaS登录流程2.外部账号创建流水号并发问题分析
AI
使用说明
第三方插件&技能简介Archify使用与安装指南Ponytail使用指南
CodexCodex CLI与IDE区别及使用指南Codex Hook单独配置与提交通知Codex MCP安装与使用指南Codex第三方插件安装与使用指南
Agent开发1.LLM、Token、上下文窗口与模型参数2.大模型 API、请求参数与响应结构3.Spring AI ChatClient4.Prompt、System Prompt、Prompt 模板6.结构化输出、JSON Schema7.SSE 流式响应8.会话 ID、聊天记录、Redis9.超时、重试、限流、降级10.完成可运行聊天接口
GitGit常用命令与Obsidian推送排查
Java
面试题Java基础与集合面试题
AtomicInteger原子计数与并发安全ConcurrentHashMap并发安全与计数Java线程、线程池与Future
python
基础Python基础语法
HTTPXHRMS员工详情接口调用(Python HTTPX)

npm 与 npx 的区别

一、一句话理解

npm 主要负责管理 Node.js 项目中的软件包;npx 主要负责临时运行某个软件包提供的命令。简单说:npm 管理工具,npx 运行工具。

二、理论:npm 和 npx 是什么

2.1 npm 是什么

npm 是 Node.js 生态中最常用的包管理工具。它可以连接 npm Registry,帮助我们:

  • 安装项目依赖;
  • 卸载和更新依赖;
  • 管理 package.json
  • 执行项目脚本;
  • 管理依赖版本和锁文件。

例如:

npm install axios

这条命令会把 axios 安装到当前项目,并通常更新 package.json 和锁文件。

2.2 npx 是什么

npx 是 npm 提供的命令执行器,用来运行 npm 包中的 CLI 命令。

例如:

npx prettier . --write

它会寻找或准备 prettier 命令,然后执行格式化操作。

现代 npm 中,npxnpm exec 是同一类能力的不同入口。npx 更适合直接在终端中使用,npm exec 更适合写进脚本或需要明确控制参数解析的场景。npm 官方文档

2.3 两者的关系

可以把它们理解成一套工具中的两个角色:

npm 负责下载、安装、升级和管理软件包

npx 负责找到并运行软件包提供的命令

npx 通常会优先使用当前项目中已经存在的命令;如果本地没有,可能从 npm Registry 下载到缓存中再运行,不一定永久安装到项目或系统中。

三、理论:npm 和 npx 是怎么工作的

3.1 npm 的基本工作方式

当执行:

npm install prettier

大致会发生以下事情:

  1. 查询并下载 prettier 包。
  2. 把包放入当前项目的 node_modules
  3. 将依赖信息写入 package.json
  4. 更新 package-lock.json 或其他锁文件。
  5. 以后项目可以直接复用这份依赖。

3.2 npx 的基本工作方式

当执行:

npx prettier . --write

大致会发生以下事情:

  1. 查找当前项目是否已经安装 prettier
  2. 如果存在,优先运行项目中的版本。
  3. 如果不存在,根据命令需要准备可执行包。
  4. 把命令行参数传给 prettier
  5. 执行完成后,不要求把工具作为项目依赖永久保存。

因此,npx 适合一次性运行、快速试用或不想污染当前项目依赖的工具。

3.3 命令中的参数属于谁

这是使用 npx 时最容易混淆的地方:

npx -y skills add tt-a1i/archify -g

可以拆成:

部分所属作用
npxnpm运行命令行工具
-ynpx下载工具时自动确认
skillsnpx 要运行的工具Skills 命令行工具
addskills安装 Skill 的子命令
tt-a1i/archifyskills要安装的 GitHub 仓库
-gskills全局安装 Skill

这里最后的 -g 不是 npx 的全局安装参数,而是 skills add 的参数。

四、实践:npm 常用命令

4.1 安装项目依赖

npm install

按照 package.json 和锁文件安装项目依赖。

4.2 安装一个依赖

npm install axios

安装运行时依赖。

安装开发依赖:

npm install --save-dev eslint

也可以写成:

npm install -D eslint

4.3 执行 package.json 脚本

假设 package.json 中有:

{
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "test": "vitest"
  }
}

执行脚本:

npm run dev
npm run build
npm test

4.4 查看和更新依赖

npm list
npm outdated
npm update

这些命令分别用于查看依赖树、检查过期依赖和更新依赖。

五、实践:npx 常用命令

5.1 运行项目中的工具

npx eslint src
npx prettier . --write
npx vitest

如果项目已经在 devDependencies 中安装了这些工具,npx 通常会优先使用项目版本。

5.2 创建一个新项目

npx create-vite@latest my-app

含义是:运行 create-vite 的最新版本,并创建名为 my-app 的项目。

5.3 临时运行 TypeScript 工具

npx tsx app.ts

这会运行 tsx,让它执行 app.ts

5.4 固定工具版本

npx prettier@3.6.2 . --write

@3.6.2 表示使用指定版本,而不是任意版本。

5.5 自动确认下载

npx -y skills add tt-a1i/archify -g

-y--yes 表示:如果 npx 需要准备命令行工具,不再询问是否确认。

六、最小例子:用 npx 安装 archify Skill

6.1 archify 是什么

archify 是一个第三方 Agent Skill,可以帮助 Codex 生成架构图、工作流图、时序图、数据流图和生命周期图。

它不是直接由 Codex /plugins 浏览器安装的完整 Plugin,而是通过 skills 命令行工具安装的第三方 Skill。

6.2 全局安装

npx skills add tt-a1i/archify -g

这里的执行链路是:

npx

运行 skills 命令行工具

skills add

下载 tt-a1i/archify

安装到全局 Skill 目录

安装完成后,重新启动 Codex 或新建会话,然后提出任务:

分析当前仓库,然后使用 archify 创建一张高层运行时架构图。
展示核心组件、主要调用路径、外部依赖和信任边界。

6.3 临时试用

如果只想试用,不想进行永久安装:

npx skills use tt-a1i/archify@archify --agent codex

这条命令同样使用 npx 运行 skills,但调用的是 use 子命令,而不是 add

6.4 这条命令为什么不用 npm install

也可以先把 skills 命令行工具安装到全局,再使用它:

npm install -g skills
skills add tt-a1i/archify -g

但一次性使用时,npx skills ... 更简洁,因为不需要先把 skills 工具永久安装到系统中。

七、npm 和 npx 的区别

对比项npmnpx
核心作用管理软件包和项目依赖运行软件包提供的命令
是否强调安装不一定永久安装
常见对象项目依赖、开发依赖、脚本CLI 工具、脚手架、一次性命令
是否修改 package.json安装依赖时通常会通常不会
常见命令npm installnpm runnpx prettiernpx create-vite
适合场景项目长期使用某个包临时运行或快速试用工具

八、如何选择

8.1 项目长期依赖一个工具

使用 npm:

npm install --save-dev prettier

然后在项目脚本或命令中使用:

npx prettier . --write

这样可以固定项目使用的 Prettier 版本。

8.2 只想快速试用一个工具

使用 npx:

npx create-vite@latest demo

8.3 想保存一套项目命令

使用 npm 的 scripts

{
  "scripts": {
    "format": "prettier . --write"
  }
}

执行:

npm run format

8.4 想安装第三方 Skill

按照 Skill 项目 README 提供的命令执行。例如 archify:

npx skills add tt-a1i/archify -g

不能因为命令中出现 npx,就认为所有 npx 命令都是安装操作。npx 只负责运行后面的工具,具体是安装、创建项目还是生成文件,取决于后面的子命令。

九、常见误区

9.1 误以为 npx 等于 npm install

两者不是一回事:

npm install prettier

重点是把 Prettier 安装为项目依赖;

npx prettier . --write

重点是运行 Prettier 命令。

9.2 误以为每个 npx 都是临时的

npx 是命令执行入口。后面的工具可能会创建项目、写入文件、安装依赖或修改系统配置。是否产生持久化变化,取决于后面的命令。

9.3 误以为 -g 总是 npx 的参数

例如:

npx skills add tt-a1i/archify -g

这里的 -g 属于 skills add;它表示 Skill 全局安装,不表示 npx 全局安装。

9.4 直接运行来源不明的 npx 命令

npx 可能从网络准备并运行软件包。执行陌生命令前,应先检查 npm 包、GitHub 仓库、版本和它会运行的脚本。

十、总结

10.1 一句话总结

npm 负责管理 Node.js 软件包,npx 负责运行软件包提供的命令;命令最终做什么,要看 npx 后面的工具和子命令。

10.2 记忆方法

npm install  → 把工具装进项目
npm run      → 执行项目脚本
npx          → 直接运行某个工具
npx -y       → 运行时自动确认

10.3 官方参考资料