昊梵体育网

🧩pnpm 12.4 开始“跨语言抓包”了:npm、Rust、Python 一

🧩pnpm 12.4 开始“跨语言抓包”了:npm、Rust、Python 一起装

pnpm 12.4 出了个实验性功能,感觉整个 monorepo 的玩法要变了。

核心就一句:在一个工作区里,pnpm install 能同时处理 npm、Rust crate 和 Python 包,共用同一个 HTTP 客户端、鉴权和内容寻址存储,并发下载。

怎么开启?

在 pnpm-workspace.yaml 里加上:

```yaml
cargo:
enabled: true
python:
enabled: true
```

然后加包:

· Rust crate: pnpm add crate:serde
· Python 包: pnpm add pypi:httpx
· npm 包: pnpm add lodash

一条 pnpm install 全搞定。

⚙️ 但边界很清楚,不是“大一统”

pnpm 没有试图取代 Cargo 或 uv,它只是把安装这一步统一了:

· Python 依赖仍然写在 pyproject.toml,锁文件用 pylock.toml,pnpm 管一个 .venv,执行 pnpm run 时把环境可执行文件塞进 PATH
· Rust 依赖仍然走 Cargo.toml/Cargo.lock,实际编译还是 Cargo 干,pnpm 只负责下载和校验 crate,然后通过源替换交给 Cargo
· 各语言的依赖不会互相污染,npm 包不会因为装了个 Python 包就写进 pnpm-lock.yaml

用官方讨论里的话说:pnpm 正在从一个 JavaScript 包安装器,变成“多语言工作区编排器”。

为什么突然搞这个?

有个挺实在的原因:pnpm 自己用 Rust 重写了,结果 CLI 的依赖管理变成了 Cargo 的事,pnpm 没法“吃自己的狗粮”了。 所以先支持 Rust crate,然后为了验证多语言架构的通用性,Python 成了第三个生态。

⚠️ 现状:实验性,别急着上生产

· 多语言支持和 pipeline 目前都是实验功能,配置和行为还可能变
· Cargo 集成目前每个工作区只解析一个 registry index,不支持依赖单独指定其他源;带 [patch] 或 [replace] 的 worktree 得先让 Cargo 生成锁文件再交给 pnpm
· 纯 Python 项目用 uv 可能更顺,这个功能主要利好已经用 pnpm workspaces 的混合仓库(TS 前端 + Python 服务 + Rust 原生模块这种)

📌 一句话总结

pnpm 12.4 的实验方向不是“取代所有包管理器”,而是给多语言 monorepo 一个统一的依赖安装入口和任务图。好不好用另说,但“一条命令并发拉三种生态的包”这个体验,确实有点香。

你现在的项目里有几种语言?会试试这个吗? 评论区聊聊👇

pnpm 前端 Rust Python monorepo 包管理 开发工具 开源