# Summary
软件项目[[元信息]]管理:[[依赖管理 环境管理]]、[[包管理]]
[[npm]]
[[uv]]
| | | |
| ------- | ---------------------- | --- |
| | [[nvm]] node.js 的版本 | |
| [[包管理]] | | |
| 维度 | [[Node.js]] / [[npm]] | Python / [[uv]] | Java / [[Maven]] |
| ------------------- | ------------------------------------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| **项目元数据(Manifest)** | `package.json` | `pyproject.toml`(PEP 621;`[project]`、`[tool.uv]` 等)| `pom.xml` |
| **锁文件(可复现安装)** | `package-lock.json`(或 `yarn.lock` / `pnpm-lock.yaml`)| `uv.lock` | **无官方锁文件**(见下)|
| **依赖声明** | `dependencies` / `devDependencies` / `peerDependencies` | `[project].dependencies`、可选 dev/optional 段 | `<dependencies>`(生产/测试用 scope)、BOM 导入 |
| **版本/冲突管理** | `overrides`/`resolutions`(管理器不同名字不同)| 版本区间(PEP 440)、索引优先级 | `<dependencyManagement>` 精确钉版本;`exclusions` 排除传递依赖;BOM(`import` scope)统一版本 |
| **任务/脚本** | `"scripts"`(直接跑命令)| 通常用 hatch/tox/Make/just;`[project.scripts]` 是安装入口 | **生命周期 + 插件**:`mvn clean package` 等,通过插件(`maven-surefire-plugin` 等)编排 |
| **运行环境约束** | `engines`(Node 版本)| `requires-python` | JDK 版本(`maven-compiler-plugin` 的 `source/target` 或 `maven-toolchains-plugin`)|
| **工作空间/多包** | workspaces(monorepo)| 多包可由工具/目录约定管理 | **多模块工程**(parent POM + modules,Maven Reactor 构建顺序)|
| **仓库/镜像** | `.npmrc` / `--registry` | `[tool.uv]`/CLI/env 配索引 | `settings.xml`(mirrors/profiles/servers)与 `<repositories>` |
| **发布/制品** | `publishConfig`、`exports`、`types` | 构建后端(hatchling 等)产出 wheel/sdist | `<distributionManagement>`(发布到私服/Nexus)、`<build>` 打包 Jar/War |
| **可复现构建** | 锁文件 + CI | `uv.lock` + venv | **做法不同**:固定依赖与插件版本(`dependencyManagement`/`pluginManagement`)、BOM、Enforcer 规则,**但没有官方 lockfile** |
**职责一览(Node 的 `package.json` vs Python+uv 的 `pyproject.toml` / `uv.lock`)**
- **项目元数据**
- `package.json`:`name`、`version`、`description`、`license`、`repository`、`type` 等。
- `pyproject.toml`:`[project]` 下的 `name`、`version`、`description`、`readme`、`authors`、`license` 等(PEP 621)。
- **依赖声明(“我要装什么”)**
- `package.json`:`dependencies`、`devDependencies`、`peerDependencies`、`optionalDependencies`(SemVer 语法如 `^1.2.3`)。
- `pyproject.toml`:`[project].dependencies`、`[project.optional-dependencies]`;开发依赖常放 `[tool.uv].dev-dependencies`(PEP 440 语法如 `>=1.2,<2`)。
- **锁定结果(可复现安装)**
- Node:`package-lock.json`(或 `yarn.lock`、`pnpm-lock.yaml`)。
- uv:`uv.lock`(解析后的确定版本与来源)。
- **脚本 / 可执行入口**
- `package.json`:`"scripts"`(如 `"build": "vite build"`)直接作为任务编排入口。
- `pyproject.toml`:`[project.scripts]` 定义安装后的命令入口;任务编排通常交给 `hatch/tox/Makefile/just` 等,uv 不主打脚本系统。
- **运行环境约束**
- `package.json`:`engines`(Node/npm 版本要求)。
- `pyproject.toml`:`[project].requires-python`(Python 版本范围)。
- **工作空间 / 多包管理**
- `package.json`:`workspaces` 管理 monorepo 多包。
- `pyproject.toml` + uv:可管理多包仓,但没有与 npm workspaces 完全对等的内置字段;通常依赖工具与目录约定。
- **解析与版本覆盖**
- `package.json`:`overrides` / `resolutions`(不同包管理器名称略有不同)强制依赖版本。
- `pyproject.toml`:用约束表达式或索引优先级、直接依赖钉死版本;必要时通过 uv 的配置实现“锁定/替换”效果。
- **源/镜像配置**
- Node:常用 `.npmrc` 或命令行 `--registry`;也可在 `package.json` 辅助标注。
- uv:在 `pyproject.toml` 的 `[tool.uv]`(或 CLI/env)配置 `index-url`、额外索引、本地缓存等。
- **发布/打包信息**
- `package.json`:`files`、`main`/`exports`、`types`、`publishConfig` 等影响发布包内容与入口。
- `pyproject.toml`:`[project]` 元数据 + 构建后端(如 `hatchling`)配置控制打包分发(Wheel/SDist)。
**一句话**:
`package.json` 与 `pyproject.toml` 承担相似的“**声明项目与依赖**”职责;Node 生态把**任务编排**也内置在 `package.json` 的 `scripts`,而 Python+uv 生态把**任务编排**更多交给外部工具,`uv.lock` 则对应 Node 的锁文件,用于**可复现安装**。