GitHub Codespaces 免费额度够用吗?和 Replit、StackBlitz 比谁更适合日常写代码

🔑 关键词:在线编程,GitHub Codespaces,Replit,StackBlitz,在线IDE

📖 摘要:从免费额度、冷启动、端口转发、原生依赖等实际坑对比 Codespaces、Replit、StackBlitz 和 Colab,并给出选择步骤。

先别问哪个好,先算你一个月能开几小时

图片

我先说个丢人的事:去年为了图方便,我拿 Replit 改一个 NestJS 小项目,凌晨两点改到一半,免费容器休眠,醒来只剩半截代码。后来我学乖了,Git 不提交不关 tab。这个事让我明白,在线编程平台不是看编辑器像不像 VS Code,而是看它多久把你踢出去、踢出去后你能不能接回来。

GitHub Codespaces 个人免费额度是 120 core hours/月,加 15GB-month 存储。别被 120 吓到,默认 2-core 机器只能开 60 小时;一天 2 小时,一个月 30 天就刚好卡死。选 4-core 只剩 30 小时。我 2024 年 3 月连续开 4-core 写 side project,月底直接超,后面只能回本地。所以第一个动作不是选平台,是打开计算器:你每天开几次、每次多久、要几核。

冷启动和预构建,比编辑器好不好看重要 10 倍

图片

Codespaces 的冷启动可以压。关键是 .devcontainer/devcontainer.json + 预构建。我拿一个 pnpm monorepo 实测:没预构建,2-core 从点开到跑通测试 48 秒;配了预构建后 12 秒。一天开 10 次,省 6 分钟。别小看这 6 分钟,它会决定你愿不愿意用在线环境改一个 3 行 bug。

步骤大概是:1)在仓库建 .devcontainer/devcontainer.json;2)写明 image、features、postCreateCommand;3)在 GitHub 仓库 Settings > Codespaces > Prebuilds 开预构建;4)提交后等第一次构建;5)以后新开走缓存。注意 postCreateCommand 里不要塞 npm install 之外的重活,比如全量数据库迁移,否则预构建会失败,你人会麻。

图片

StackBlitz、Replit、Colab 各自能干什么,不能干什么

StackBlitz 的 WebContainers 跑在浏览器里,Vite/React/Next 前端演示很爽。我 2023 款 MacBook Air M2 + Chrome 120 实测,Vite React 模板首次加载 4.8 秒,二次 1.5 秒。但它跑不了 Docker,跑 PostgreSQL 这种要完整后端的活会难受,原生依赖也容易挑版本。你要演示一个前端组件,它很快;你要跑一个公司级后端,它很快会告诉你什么叫边界。

Replit 适合教学、小工具、Python 爬虫。免费层资源少、会休眠,部署规则也改过几轮,别拿三年前博客里的 0.5 vCPU/512MB 当准。端口要监听 0.0.0.0,不是 127.0.0.1。Flask 要写 app.run(host='0.0.0.0', port=3000)。装系统包看 replit.nix,不是随便 apt-get。这个坑很多教程不写,新手能卡一晚上。

图片

Colab 是另一条线。免费 GPU 有吸引力,但免费 notebook 有 12 小时上限、空闲 90 分钟左右会断,具体会变。拿它跑训练,数据挂 Google Drive,开头一个 cell 装依赖,断线重连至少不用从零来。但它不适合当日常工程 IDE,也不适合放生产密钥。

我自己的选择:前端演示用 StackBlitz,公司项目用 Codespaces

如果只是改前端 demo,我会开 StackBlitz,因为秒开、分享链接方便。公司项目、需要 Docker、需要 Postgres/Redis,我用 Codespaces 或 Gitpod,因为环境一致性比省那点本地内存值钱。数据处理、模型微调,我用 Colab 或 Kaggle Notebook,但不把工程代码放里面。教学带人,Replit 最省沟通成本,前提是别指望免费层 24 小时在线。

图片

独立观点:在线编程真正值钱的地方,不是把 IDE 搬到浏览器,而是把开发环境变成 Git 里可 review 的代码。只要 .devcontainer 或 Dockerfile 在仓库里,你今天用 Codespaces,明天换 Gitpod,后天回本地,成本都低。反过来,如果你在网页里手点安装依赖,那只是租了一台会过期的电脑。

三个常见坑和修法

图片

端口打不开:先看应用有没有监听 0.0.0.0,再看平台端口 visibility。Codespaces 默认转发端口可能是 private,分享给同事要改 public。Replit 里 Flask 写 127.0.0.1 基本等于自己锁门。

断线代码丢:开自动保存,终端用 tmux,重要改动每 10 分钟 git commit 一次。别信浏览器的恢复现场,它有时候不认你。

依赖装不上:先看架构是 arm64 还是 amd64,再看 node-gyp 有没有 python3、make、g++。有些 npm 包在本地能装,在在线容器里就是不行,不是平台垃圾,是你缺系统库。

🏷️ 标签: