logo
0
0
WeChat Login
Marcus Zhang<marcuszhang@cnb.cool>
feat: multi-env isolation toolkit (asdf + direnv)

Multiple Env 🚀

macOS OpenCode License

Multi-language development environment isolation toolkit for developers using OpenCode CLI on macOS

🎯 Isolate | 📦 Reproduce | 🔄 Switch | ⚡ Accelerate


🤖 AI 一键配置

IMPORTANT

For AI Assistants (Claude / OpenCode)
如果你是 AI 助手,请执行以下操作:

读取 AI_SETUP_GUIDE.md,扫描用户 workspace 下的现有项目,为每个项目生成精确的配置模板,并提供交互式向导帮助用户初始化环境。

Read AI_SETUP_GUIDE.md, scan the user's workspace projects, generate precise configuration templates for each project, and guide the user through interactive environment initialization.

💡 一键环境配置现已支持 Claude & OpenCode!
AI 助手可以直接阅读 AI_SETUP_GUIDE.md 并自动为你的项目配置合适的开发环境。


📋 项目简介

Multiple Env 为开发者提供一个完整的多语言开发环境隔离解决方案。无论是个人开发者还是团队协作,都能实现:

环境隔离 — 每个项目独立的技术栈和依赖
一键复现 — 新成员秒级搭建相同环境
快速切换 — 在不同项目间无缝切换,告别版本冲突
AI 友好 — 专为 OpenCode CLI 优化,支持 AI 自动配置

三层架构设计

层级工具适用场景
Layer 1asdf + direnv轻量级隔离(Node.js, Python, Go, Java Web 项目)
Layer 2Dev Containers全隔离(需要数据库、缓存等服务)
Layer 3Native移动端(iOS, React Native, Flutter)

🏗️ 方案架构

┌─────────────────────────────────────────────────────────────────────┐
│                        Multiple Env 架构                            │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │                      🖥️  Native (Layer 3)                    │   │
│  │                   iOS / React Native / Flutter               │   │
│  │                    Xcode / Android Studio                    │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                              ⬆️                                    │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │                 🐳 Dev Containers (Layer 2)                  │   │
│  │         Docker + VS Code + 数据库/缓存/消息队列              │   │
│  │       PostgreSQL, Redis, MongoDB, RabbitMQ, Kafka...        │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                              ⬆️                                    │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │                  ⚡ asdf + direnv (Layer 1)                  │   │
│  │     Node.js, Python, Go, Java, Ruby, Rust, Elixir...        │   │
│  │    自动版本切换 · 环境变量注入 · 项目级隔离                  │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                              ⬆️                                    │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │                    🗂️  Project Workspace                     │   │
│  │        Web Apps / APIs / CLIs / Libraries / Mobile           │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

架构说明

Layer 1 (asdf + direnv) ────────►  80% 的项目使用
     ├── 自动检测 .tool-versions
     ├── 自动注入 .envrc 环境变量
     └── 毫秒级切换,零开销

Layer 2 (Dev Containers) ───────►  需要完整服务栈
     ├── Docker 全隔离
     ├── 预装数据库、缓存、工具
     └── 团队环境 100% 一致

Layer 3 (Native) ───────────────►  移动端开发
     ├── iOS: Xcode + Swift
     ├── Android: Android Studio
     └── 跨平台: Flutter, React Native

🚀 快速开始

1️⃣ 克隆仓库

git clone https://cnb.cool/asahiluna/multiple-env.git && cd multiple-env

2️⃣ 安装环境工具

bash scripts/install-environment-tools.sh

这会安装:

  • asdf — 多语言版本管理器
  • direnv — 自动环境变量加载
  • Docker Desktop — Dev Container 支持

3️⃣ 配置你的项目

已有项目配置:

bash scripts/setup-projects.sh

创建新项目:

bash scripts/init-new-project.sh

📁 目录结构

multiple-env/
├── 📜 README.md                    # 本文件
├── 🤖 AI_SETUP_GUIDE.md            # AI 助手配置指南
│
├── 🔧 scripts/                     # 自动化脚本
│   ├── install-environment-tools.sh   # 安装 asdf, direnv, Docker
│   ├── setup-projects.sh              # 批量配置现有项目
│   ├── init-new-project.sh            # 交互式新项目初始化
│   └── generate-config.sh             # 配置模板生成器
│
├── 📋 templates/                   # 配置模板库
│   ├── existing-projects/          # 已适配项目模板
│   │   ├── node-web/               # Node.js Web 项目
│   │   ├── python-api/             # Python API 项目
│   │   ├── go-cli/                 # Go CLI 项目
│   │   └── java-spring/            # Spring Boot 项目
│   │
│   └── future-projects/            # 标准技术栈模板
│       ├── vue-spa/                # Vue.js 单页应用
│       ├── react-spa/              # React 单页应用
│       ├── nextjs-fullstack/       # Next.js 全栈
│       ├── fastapi/                # FastAPI 项目
│       ├── flask/                  # Flask 项目
│       ├── django/                 # Django 项目
│       ├── spring-boot/            # Spring Boot
│       ├── flutter-mobile/         # Flutter 移动应用
│       └── react-native/           # React Native 应用
│
└── 📚 docs/                        # 文档
    ├── asdf-guide.md               # asdf 使用指南
    ├── direnv-guide.md             # direnv 配置指南
    ├── devcontainer-guide.md       # Dev Container 指南
    └── troubleshooting.md          # 常见问题

🛠️ 技术栈支持

语言/框架版本TemplateDevContainer推荐层级
Node.js18, 20, 22 LTSLayer 1
Python3.10, 3.11, 3.12Layer 1/2
Go1.21, 1.22Layer 1
Java17, 21 LTSLayer 1/2
Vue.js3.xLayer 1
React18.xLayer 1
Next.js14.x, 15.xLayer 1/2
FastAPI0.110+Layer 2
Flask3.xLayer 1/2
Django5.xLayer 2
Spring Boot3.xLayer 2
Flutter3.22+Layer 3
React Native0.74+Layer 3

扩展支持

Ruby       → 通过 asdf-ruby
Rust       → 通过 asdf-rust
Elixir     → 通过 asdf-elixir
Kotlin     → 通过 asdf-java

📖 使用方法

🆕 初始化新项目

运行交互式向导:

bash scripts/init-new-project.sh

向导会询问:

  1. 项目名称
  2. 技术栈(自动检测或手动选择)
  3. Node.js/Python/Go/Java 版本
  4. 是否需要数据库服务
  5. 是否创建 Dev Container 配置

🔧 配置现有项目

templates/existing-projects/ 目录中找到匹配的技术栈,将配置复制到你的项目目录:

# 示例:配置现有 Node.js 项目
cd your-node-project
cp -r /path/to/multiple-env/templates/existing-projects/node-web/.devcontainer/ .
cp /path/to/multiple-env/templates/existing-projects/node-web/.tool-versions .
cp /path/to/multiple-env/templates/existing-projects/node-web/.envrc.example .envrc

# 编辑配置
echo "nodejs 20.11.0" > .tool-versions
echo "export NODE_ENV=development" >> .envrc

# 允许 direnv
direnv allow

📦 使用标准模板

templates/future-projects/ 复制标准模板:

# 示例:创建新的 FastAPI 项目
cd your-fastapi-project

# 复制 Dev Container 配置
cp -r /path/to/multiple-env/templates/future-projects/fastapi/.devcontainer/ .

# 复制工具版本文件
cp /path/to/multiple-env/templates/future-projects/fastapi/.tool-versions .

# 复制环境变量模板
cp /path/to/multiple-env/templates/future-projects/fastapi/.envrc.example .envrc

# 初始化并允许环境
direnv allow

💻 日常工作流

典型的一天

# 进入项目目录 — direnv 自动加载环境
$ cd ~/projects/my-api

direnv: loading ~/projects/my-api/.envrc
direnv: export +PYTHON_VERSION +VIRTUAL_ENV ~PATH

# 检查当前版本
$ python --version
Python 3.11.7

# 启动 OpenCode
eval "$($HOME/.local/bin/opencode init zsh)"
$ opencode
🤖 OpenCode CLI ready. Type 'help' for commands.

# 开发、测试、提交...
[opencode] > run tests
✅ All tests passed!

# 切换到另一个项目
[opancode] > exit
$ cd ~/projects/my-frontend

direnv: unloading
direnv: loading ~/projects/my-frontend/.envrc
direnv: export +NODE_VERSION +NPM_CONFIG_PREFIX ~PATH

$ node --version
v20.11.0

常用命令速查

# asdf 常用
direnv allow                    # 允许当前目录的 .envrc
asdf list                       # 查看已安装的语言版本
asdf install                    # 安装 .tool-versions 中指定的版本

# direnv 常用
direnv edit .                   # 编辑当前目录的 .envrc
direnv reload                   # 重新加载环境
direnv deny                     # 拒绝/撤销当前目录权限

# Dev Container
code .                          # 在 VS Code 中打开,自动提示 "Reopen in Container"
.devcontainer/up.sh             # 手动启动容器(如有提供)
.devcontainer/down.sh           # 停止容器

🎯 设计原则

原则说明
渐进式从 Layer 1 开始,按需升级到 Layer 2/3
透明性配置即代码,所有环境定义都在版本控制中
AI 优先专为 AI 编程助手优化,支持自动生成配置
零侵入不改现有项目结构,只添加配置文件
团队友好新成员 git clone 后即可获得一致环境

🤝 贡献指南

我们欢迎所有形式的贡献!

  1. Fork 本仓库
  2. 创建 Feature Branch (git checkout -b feature/amazing-feature)
  3. Commit 你的更改 (git commit -m 'Add amazing feature')
  4. Push 到分支 (git push origin feature/amazing-feature)
  5. 打开 Pull Request

提交新模板

如果你有新的技术栈模板想要分享:

  1. templates/future-projects/ 创建新目录
  2. 包含 .tool-versions, .envrc.example, .devcontainer/(可选)
  3. 添加 README.md 说明使用方法
  4. 提交 PR

📚 相关文档


📝 License

MIT © 2024 asahiluna


Made with ❤️ for developers who value clean environments

⭐ Star this repo if it helps you!