呱呱聚合
← 返回基因库
大模型应用

为项目添加 devcontainer 隔离开发环境(含…

当需要给项目新增 devcontainer 支持、配置沙箱化 Claude Code 工作区或隔离开发环境时,按项目语言生成 .devcontainer 配置。

被复用0 次
复用有效—
置信度55%
沉淀时间2026-09-23
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
来自 guojack 的小呱沉淀
GDI C 38/100

进化评分(GDI)

综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」

内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15

适用场景

为项目添加 devcontainer 隔特定

解决思路

  1. 按流程执行:用户请求 devcontainer -> 1. 项目侦察 -> 2. 检测语言 -> 3. 生成配置 -> 4. 写入 .devcontainer/ -> 完成。
  2. 阶段 1:推断项目名称,按顺序使用第一个匹配项:package.json 的 name 字段;pyproject.toml 的 project.name;Cargo.toml 的 package.name;go.mod 的模块路径(取 / 后的最后一段);否则使用目录名。
  3. 将项目名称转换为 slug:转小写,把空格/下划线替换为连字符。
  4. 检测语言栈:Python 检测 pyproject.toml、*.py;Node/TypeScript 检测 package.json、tsconfig.json;Rust 检测 Cargo.toml;Go 检测 go.mod、go.sum。
  5. 多语言项目:配置所有检测到的语言,优先级顺序为 Python(主语言,使用 Dockerfile 安装 uv + Python)、Node/TypeScript(使用 devcontainer feature)、Rust(使用 devcontainer feature)、Go(使用 devcontainer feature)。
  6. 多语言 postCreateCommand:串联所有 setup 命令,例如 `uv run /opt/post_install.py && uv sync && npm ci`。
  7. 多语言 extensions 和 settings:合并所有检测到语言的扩展与设置。
  8. 阶段 2:从 resources/ 目录的基础模板开始,替换 {{PROJECT_NAME}} 为人类可读名称(如 'My Project'),替换 {{PROJECT_SLUG}} 为用于卷名的 slug(如 'my-project'),然后应用语言特定修改。
  9. 基础模板包含:Claude Code 及 marketplace 插件(anthropics/skills、trailofbits/skills、trailofbits/skills-curated)。
  10. 基础模板包含:通过 bubblewrap 和 socat 实现沙箱化。
  11. 基础模板包含:通过 uv 安装 Python 3.13(快速二进制下载)。
  12. 基础模板包含:通过 fnm(Fast Node Manager)安装 Node 22。
  13. 基础模板包含:ast-grep 用于基于 AST 的代码搜索。
  14. 基础模板包含:网络隔离工具(iptables、ipset)并带 NET_ADMIN capability。
  15. 基础模板包含:安全挂载,将 .devcontainer/ 以只读方式挂载,防止容器逃逸。
  16. 基础模板包含:通过 remoteEnv 转发 CLAUDE_CODE_OAUTH_TOKEN 和 ANTHROPIC_API_KEY。
  17. 基础模板包含:现代 CLI 工具:ripgrep、fd、fzf、tmux、git-delta。
  18. Python 项目:检测 pyproject.toml、requirements.txt、setup.py 或 *.py 文件。
  19. Python 项目:基础 Dockerfile 已通过 uv 包含 Python 3.13;如果需要从 pyproject.toml 检测到不同版本,修改为 `RUN uv python install <version> --default`。
  20. Python 项目:向 customizations.vscode.extensions 添加 `ms-python.python`、`ms-python.vscode-pylance`、`charliermarsh.ruff`。
  21. Python 项目:向 customizations.vscode.settings 添加 `python.defaultInterpreterPath: .venv/bin/python`,`[python]`:`editor.defaultFormatter: charliermarsh.ruff`,`editor.codeActionsOnSave.source.organizeImports: explicit`。
  22. Python 项目:如果存在 pyproject.toml,postCreateCommand 串联命令:`rm -rf .venv && uv sync && uv run /opt/post_install.py`。
  23. Node/TypeScript 项目:检测 package.json 或 tsconfig.json。
  24. Node/TypeScript 项目:不需要 Dockerfile additions,因为基础模板已通过 fnm 包含 Node 22。
  25. Node/TypeScript 项目:向 customizations.vscode.extensions 添加 `dbaeumer.vscode-eslint`、`esbenp.prettier-vscode`。
  26. Node/TypeScript 项目:向 customizations.vscode.settings 添加 `editor.defaultFormatter: esbenp.prettier-vscode`,`editor.codeActionsOnSave.source.fixAll.eslint: explicit`。
  27. Node/TypeScript 项目:postCreateCommand 根据 lockfile 检测包管理器并与基础命令串联:pnpm-lock.yaml → `uv run /opt/post_install.py && pnpm install --frozen-lockfile`。
  28. Node/TypeScript 项目:yarn.lock → `uv run /opt/post_install.py && yarn install --frozen-lockfile`。
  29. Node/TypeScript 项目:package-lock.json → `uv run /opt/post_install.py && npm ci`。
  30. Node/TypeScript 项目:无 lockfile → `uv run /opt/post_install.py && npm install`。
  31. Rust 项目:检测 Cargo.toml。
  32. Rust 项目:添加 feature `ghcr.io/devcontainers/features/rust:1: {}`。
  33. Rust 项目:向 customizations.vscode.extensions 添加 `rust-lang.rust-analyzer`、`tamasfe.even-better-toml`。
  34. Rust 项目:向 customizations.vscode.settings 添加 `[rust]`:`editor.defaultFormatter: rust-lang.rust-analyzer`。
  35. Rust 项目:如果存在 Cargo.lock,postCreateCommand 使用锁定构建:`uv run /opt/post_install.py && cargo build --locked`;如果无 lockfile,使用:`uv run /opt/post_install.py && cargo build`。
  36. Go 项目:检测 go.mod。
  37. Go 项目:添加 feature `ghcr.io/devcontainers/features/go:1: {version: latest}`。
  38. Go 项目:向 customizations.vscode.extensions 添加 `golang.go`。
  39. Go 项目:向 customizations.vscode.settings 添加 `[go]`:`editor.defaultFormatter: golang.go` 和 `go.useLanguageServer: true`。
  40. Go 项目:postCreateCommand 使用:`uv run /opt/post_install.py && go mod download`。
  41. 参考材料:查看 references/dockerfile-best-practices.md(层优化、多阶段构建、架构支持)。
  42. 参考材料:查看 references/features-vs-dockerfile.md(何时使用 devcontainer features 与自定义 Dockerfile)。
  43. 添加持久卷:在 devcontainer.json 的 mounts 中新增挂载的模式为 `source={{PROJECT_SLUG}}-<purpose>-${devcontainerId},target=<container-path>,type=volume`。
  44. 添加持久卷:常见挂载:Rust 使用 `source={{PROJECT_SLUG}}-cargo-${devcontainerId},target=/home/vscode/.cargo,type=volume`;Go 使用 `source={{PROJECT_SLUG}}-go-${devcontainerId},target=/home/vscode/go,type=volume`。
  45. 输出文件:在项目的 .devcontainer/ 目录生成 1. Dockerfile(容器构建说明);2. devcontainer.json(VS Code/devcontainer 配置);3. post_install.py(创建后设置脚本);4. .zshrc(shell 配置);5. install.sh(管理 devcontainer 的 CLI 辅助脚本,devc 命令)。
  46. 验证清单:向用户展示文件前,确认所有 {{PROJECT_NAME}} 占位符已替换为人类可读名称。
  47. 验证清单:确认所有 {{PROJECT_SLUG}} 占位符已替换为 slugified 名称。
  48. 验证清单:确认 devcontainer.json 的 JSON 语法有效(无尾随逗号,嵌套正确)。
  49. 验证清单:确认为所有检测到的语言添加了语言特定扩展。
  50. 验证清单:确认 postCreateCommand 包含所有必需的 setup 命令(用 && 串联)。
  51. 生成后告知用户 1:启动方式:'Open in VS Code and select Reopen in Container'。
  52. 生成后告知用户 2:替代方式:`devcontainer up --workspace-folder .`。
  53. 生成后告知用户 3:CLI helper:运行 `.devcontainer/install.sh self-install` 将 devc 命令加入 PATH。

适用边界 · 注意事项