Transcript
00:00:00你的自述文件(README)在骗你,上面写着安装只需五分钟,结果 Node 版本不对,Python 版本也不对
00:00:07Postgres 缺失,Docker 跑得慢得要死,还没开始写代码就已经在调试环境了
00:00:13你的开发环境不该写在 README 里,而应该存在 Git 中,这就是 Devbox 的作用
00:00:20一个 devbox.json 文件,一条 devbox shell 命令,所有开发者拥有相同的环境,无需全局安装
00:00:28而且完全不需要 Nix 知识,让我演示一下
00:00:30起初,Devbox 看起来简单得过分。你创建一个 devbox.json,列出项目所需的工具
00:00:42无论是 Node、Go、Python、Postgres,还是你的技术栈实际需要的任何东西,提交这个文件
00:00:50然后别人只需要运行 devbox shell,他们就能得到和你一模一样的环境,相同的版本、工具和脚本,无需全局
00:00:58安装,也不用去管那八个必须先安装的东西,或是多年前遗留的 Homebrew 状态,你的安装
00:01:03配置不再只存在于某人的记忆里,而是存在于你的仓库中。这听起来可能微不足道,但如果你
00:01:09曾经因为本地环境崩溃而浪费了半天时间,你就知道这绝非小事。如果你喜欢
00:01:16这些能优化工作流的编程工具,请务必订阅,我们会持续更新视频
00:01:20现在让我们从头开始,创建一个空项目,新建一个文件夹
00:01:25我们命名为 devbox-demo,进入该文件夹,安装好 Devbox 后只需运行
00:01:31devbox init,Devbox 会创建一个名为 devbox.json 的文件。现在它基本上是空的,只是
00:01:39Devbox 给我们的样板代码。现在让我们添加项目实际需要的工具,要添加工具,我们可以
00:01:45运行 devbox add,我准备安装 Go、Node.js 和 Python。注意这里
00:01:52很重要的一点是:我没有进行全局安装,没有修改我的系统 Node,也没有触碰我的系统
00:02:00Python。这些工具只属于这个项目。现在当我运行 devbox shell,我就进入了一个纯净的项目
00:02:09环境。进入环境后,你可以检查版本,比如 go version,node
00:02:14version,python version,我可以检查一切以确保运行正常,这就是最大的回报
00:02:19项目需要特定工具,Devbox 就给我提供了这些工具。现在让我们添加一个脚本,在 devbox
00:02:27json 中,我们可以定义一个 test,我只是简单 echo 一下正在运行的测试,并获取 node
00:02:34和 go 的版本。当你运行 devbox run test,同样的命令对任何使用此仓库的人都有效
00:02:42相同的脚本、相同的工具、相同的环境。现在看我退出,只需运行 exit
00:02:48你就会离开那个环境,我又回到了普通的机器环境。这很简单,对吧?
00:02:53Devbox 到底在做什么呢?实际上,Devbox 底层使用的是 Nix。Nix 很棒,因为它
00:03:00是为可复现性而生的。它不会像某些东西那样默认安装最新的版本
00:03:06而是可以锁定项目实际需要的精确工具。这是好的一面,难点在于
00:03:12Nix 感觉像一个全新的世界。有很多概念很棒,但当你只想获得正确的 node 版本时
00:03:18它并不太友好。Devbox 为我们展示了另一种可能
00:03:23它说,如果我们保持这种可复现性,但让工作流感觉正常会怎样?所以与其
00:03:29编写 Nix 表达式,你可以使用像 devbox add、search、shell、run、services 等命令。所有
00:03:37这些命令简单得多,你的项目会得到两个重要文件:一个 json 文件和一个
00:03:44锁文件。把 devbox.json 看作环境的需求,把 devbox.lock 看作锁定
00:03:52你所安装确切版本的凭证。提交这两个文件,现在你的环境不再只是 README 中的一段文字
00:03:58而是项目本身的一部分。Devbox 支持 macOS、Linux 和 WSL,可以与 VS Code 集成
00:04:06可以定义脚本,可以管理数据库等服务,当你需要时,它可以导出到
00:04:12Docker、Dev Containers 和 CI 工作流中。这个工具的价值不仅仅在于炫酷,它简单到了极致。价值
00:04:19在于时间。第一个问题是 README,README 可能会写任何东西,它
00:04:26可能说安装 Node 18,但应用已经更新,实际上需要 Node 20。第二个问题
00:04:32它能真正解决的是入职流程。这是你工作的第一天,入门应该很简单
00:04:37但我们都知道事实并非如此。你不应该需要询问需要哪个 node 版本,不应该
00:04:43需要去 ping 别人问我们要用哪个 python 版本,我真的需要在本地安装 postgres 吗,为什么这东西
00:04:48只在那边的小提姆电脑上能跑?他们只需要克隆仓库,进入 shell
00:04:52然后运行项目即可。如果出了问题,至少大家是在相同的环境下排查。问题在于
00:04:58全局污染。尝试安装工具不应该搞坏你的电脑。你需要为这个仓库安装 go 1.22,你加上它,然后
00:05:06另一个地方要 node 20,也没问题。工具随项目走,你的
00:05:13系统保持整洁。有了 Devbox,你的环境定义可以在本地开发
00:05:18和自动化流程之间共享。这能解决所有 CI 问题吗?不能,但它消除了很大一类愚蠢的
00:05:26问题,而愚蠢的问题往往最伤人。它们很简单,但我们却总是在犯
00:05:32最后,关于 Docker。本地使用繁重的 Docker 工作流,尤其是如果
00:05:40你需要容器时,Docker 依然很棒。但很多团队在本地使用 Docker 是因为他们没有更好的
00:05:46方式来管理工具。现在的优势在于工作流极其简单:devbox add、shell、run,你
00:05:52不需要学习太多东西。环境变成了项目实实在在的一部分,即仓库里的
00:05:57一个真实文件。当每个人都使用相同的版本和脚本时,调试就变得更容易。这很棒,
00:06:03超级简单。唯一可能让你烦恼的是,第一次 Nix 下载可能需要一点时间,
00:06:09没关系,第一次而已。json 很简单,但我们也知道,如果添加太多东西,它会变得难看
00:06:15对于简单的脚本来说这没问题,但对于复杂的配置逻辑,不要把巨大的 shell 命令塞进 json
00:06:22只需把逻辑写在 .sh 文件里,然后从 devbox 中调用。最后,Devbox 不是一个完整的云 IDE
00:06:30如果你需要基于浏览器的编码环境、即时预览链接,你可能依然需要像 Codespaces 这样的工具
00:06:36Devbox 最擅长的是本地和 CI 的可复现性。Devbox 不会解决所有的开发
00:06:42问题,但它能解决最让我们头疼的那些,即让项目成功跑起来
00:06:46所以,如果你的项目涉及多种语言或不止一个 CLI 工具,尝试一下绝对值得
00:06:51如果你喜欢像这样的编程工具,务必订阅 Better Stack 频道,我们
00:06:56下期视频再见。
Community Posts
No posts yet. Be the first to write about this video!
Write about this video