2026-04-13 学习日志
今日主题
- npm bin 字段与 npx 命令解析机制
- Codex 插件桥接机制
- npm dependencies vs devDependencies
新增认知
npm bin 字段与 npx 命令解析机制
- package.json 的 bin 字段有两种写法:字符串形式时 npm 自动用 name 字段值作为命令名;对象形式时 key 就是命令名。两种写法等价的前提是命令名与包名一致。
- npx 执行包时,在该包的 bin 对象中查找与包名同名的 key 作为默认入口。这就是为什么 npx skills 能直接工作——bin 里有一个 key 叫 skills 与包名匹配。
- npx pkg@version arg 中,arg 是作为参数传给默认 bin 命令的,而不是选择另一个 bin 入口。要显式调用非默认 bin,需要 npx --package=pkg -- bin-name 语法。
- npx 本质是 npm exec 的别名(alias: x),完整格式支持 --package 指定包、-c 执行命令字符串、-- 分隔包名与命令。
Codex 插件桥接机制
- codex-plugin-cc 不是把 Claude Code 与 Codex 做成同进程插件,而是在本地加了一层 Node 中间层,把 slash command、hook 和子代理转成对 codex app-server 的 JSON-RPC 调用。
- 这个插件真正桥接的不是通用 CLI stdout,而是 codex app-server 的线程、turn 和 item 事件流,因此才能支持 review、task、resume、interrupt、后台任务和结构化进度。
- codex app-server 在这个插件里不是系统级全局守护进程,更准确地说是会话级可复用运行时:有 broker 时表现为当前工作区/当前 Claude 会话共享的单实例,没有 broker 时则按需直连启动。
- 同一目录下多个 Claude 进程并发使用 /codex:* 时,不一定只会有一个 codex 进程;broker 只串行服务一个活跃请求,忙时其余请求会回退为直连启动新的 codex app-server,所以进程数通常接近 1 个共享实例加上其余并发请求的临时实例。
npm dependencies vs devDependencies
- dependencies 与 devDependencies 的区别对前端 SPA 没有实质影响:Vite 打包只追踪代码中的 import,不关心包属于哪个字段,只要 node_modules 中存在即可打包进去。
- npm install 的行为由调用参数决定,不是由项目类型决定:加 --production 或 NODE_ENV=production 时只安装 dependencies,不加则两个字段都装。
- 服务端生产部署习惯加 --production 的原因:服务端直接运行源码,node_modules 就是运行时依赖,省掉 devDependencies 可减小部署体积;前端 SPA 不加是因为 build 阶段需要 vite/typescript 等 devDependencies。