语言与平台构建:尊重每个生态自己的依赖合同
Go、Rust、Swift、.NET、PHP 和 Ruby 都有成熟的依赖或构建入口,但“都有一个 lock 文件”不意味着锁定语义相同。应用与库是否提交 lock、平台和 feature 如何进入解析、源码依赖与二进制依赖怎样校验、私有模块名会不会泄露,都必须回到各生态官方模型。
七篇文章
| 文章 | 项目事实 | 重点风险 |
|---|---|---|
| Go Modules 与 Workspaces | go.mod、go.sum、go.work、vendor | MVS、proxy / checksum、私有模块路径泄露 |
| Cargo 与 Rust Workspaces | Cargo.toml、Cargo.lock、features、workspace | feature 组合、registry 凭证、target cache |
| Swift Package Manager | Package.swift、Package.resolved | 平台约束、binary dependency、registry 与工具链 |
| NuGet | PackageReference、central versions、lock | 多源、凭证、缓存、locked mode 与依赖恢复 |
| MSBuild 与 dotnet | project / solution、target、configuration、RID | 隐式 target、增量输入、binlog 敏感信息 |
| Composer | composer.json、composer.lock、platform requirements | scripts、plugins、root 执行和多 repository |
| Bundler | Gemfile、Gemfile.lock、platform、deployment | source 凭证、platform 漂移与未使用 bundle exec |
共同阅读方法
每篇先回答五个问题:
manifest 声明的是直接依赖、构建目标还是两者都有。lock 或 checksum 文件锁定了版本、来源、内容、平台还是解析结果。workspace / solution / module 如何组合多个项目,边界是否会影响发布和测试。
私有源、代理、CA、凭证和公开上游怎样排序,错误请求会泄露什么。clean、offline / vendor、locked build 与 CI 如何证明结果可重建。
共同验证证据
工具链和 CLI 版本来自项目或组织批准入口,不由偶然全局状态决定。从干净 clone 恢复依赖,记录实际源、lock / checksum 校验和平台输入。运行该生态官方 build / test 入口,并记录退出码与产物位置。
清理项目输出和用户缓存的动作分开,删除前确认可重建范围。私有源不可达、凭证撤销或离线时应明确失败,不静默回退到不批准的公共源。CI 使用同一 manifest、lock 和 CLI 入口,差异只来自显式 OS / architecture / toolchain 矩阵。
共同治理边界
内部 module、crate、package、gem 或 feed 名称本身可能暴露业务与组织结构。诊断输出、binlog、依赖图和缓存元数据分享前要脱敏。凭证不进入 URL、manifest、lock、仓库模板或构建参数;优先使用作用域有限、可轮换、可撤销的身份。
应用、库和工具链的 lock 策略可能不同,必须按生态官方建议和团队分发方式确定。不能用“库不提交 lock”或“所有项目都提交 lock”作为跨语言口号。
团队落地检查
每种生态有独立安装 / 启用、配置、最小项目、依赖恢复、构建测试、清理和排障闭环。manifest、lock、workspace、cache、source 和 artifact 的工具特有语义讲清。私有源、凭证、平台差异、原生依赖和生命周期脚本进入深水区。
本机与 CI 契约、升级回滚、owner 和退出清理可执行。语言语法、框架业务代码和制品发布平台只引用,不挤占工具文章。
