开发工具CLI【免费下载链接】devenvFast, Declarative, Reproducible, and Composable Developer Environments using Nix项目地址https://gitcode.com/gh_mirrors/de/devenv点击查看免费下载导读Gleam 是一门运行在 Erlang 虚拟机BEAM之上的强类型函数式语言。在 devenv 项目中通过languages.gleam模块你可以在 Nix 声明式环境中一键获得完整、可复现的 Gleam 开发工具链。本文基于 Gleam 语言文档 与 模块实现系统讲解该模块的两个核心配置项languages.gleam.enable与languages.gleam.package的用法、默认值与底层行为并给出可直接复制运行的完整示例。模块概览一个选项组两个配置项devenv 将每种语言的支持封装为languages.name.*形式的选项。Gleam 模块位于 src/modules/languages/gleam.nix对外暴露两个选项选项类型默认值作用languages.gleam.enablebooleanfalse是否启用 Gleam 开发工具languages.gleam.packagepackagepkgs.gleam指定要使用的 Gleam 包可覆盖为指定版本这两个选项是本文的核心下面逐一展开。开启 Gleam 支持languages.gleam.enablelanguages.gleam.enable是一个布尔开关用于控制是否将 Gleam 开发工具纳入当前 devenv 环境。类型boolean默认值false示例值true从源码实现看src/modules/languages/gleam.nix#L18-L24当enable true时模块会执行两件事config lib.mkIf cfg.enable { languages.erlang.enable true; packages [ cfg.package ]; };自动启用 Erlang 支持languages.erlang.enable trueGleam 编译产物运行在 BEAM 虚拟机上需要 Erlang/OTP 运行时才能执行因此模块会隐式拉起 Erlang 环境保证gleam run产出的字节码可以直接运行。把cfg.package加入packages即把选定的 Gleam 包安装进 shell使gleam、gleam build、gleam test、gleam format等命令直接可用。如果你在 devenv 之外还单独配置了languages.erlang.enable两者并不冲突模块层面的叠加是幂等的。选择 Gleam 版本languages.gleam.packagelanguages.gleam.package用于指定环境内安装的 Gleam 包来源。类型package默认值**pkgs.gleam即当前 nixpkgs 快照中的 Gleam 版本源码中的定义src/modules/languages/gleam.nix#L10-L15package lib.mkOption { type lib.types.package; default pkgs.gleam; description The Gleam package to use.; defaultText lib.literalExpression pkgs.gleam; };为什么需要覆盖 package三个常见场景锁定版本默认跟随 nixpkgs想固定到特定 Gleam 版本例如项目要求 1.x 的某个小版本时可以从 nixpkgs 或其他源取指定版本使用自定义构建例如带特殊编译选项或补丁的本地 Gleam 构建产物统一工具链版本让 CI 与本地 shell 使用完全一致的 Gleam 版本保证可复现性。覆盖示例将 Gleam 替换为自定义包{ pkgs, ... }: { languages.gleam.enable true; languages.gleam.package pkgs.gleam.overrideAttrs (old: { # 例如打上本地补丁或调整构建参数 patches (old.patches or []) [ ./gleam-custom.patch ]; }); }需要注意的是覆盖package不会关闭 Erlang 依赖的自动启用——只要enable trueErlang 运行时依然会被带上。完整可运行示例仓库的 examples/gleam 目录提供了一个最小可运行示例直接说明了实际用法。devenv.nix{ pkgs, ... }: { # https://devenv.sh/languages/ languages.gleam.enable true; enterShell gleam --version ; # See full reference at https://devenv.sh/reference/options/ }配套的 devenv.yaml 声明了输入源inputs: nixpkgs: url: github:NixOS/nixpkgs/nixpkgs-unstable使用方法在包含上述两个文件的目录下devenv shell # 进入带 gleam 的开发者 shell gleam --version # 验证 Gleam 已就绪 gleam new my_app # 初始化新项目 cd my_app gleam runenterShell会在每次进入环境时打印gleam --version用于即时确认工具链生效。由于 Erlang 被自动启用gleam run启动 BEAM 进程时不会再提示缺少运行时。底层实现要点为什么开启 Gleam 必须同时开启 Erlang结合 devenv-core 的模块求值流程languages.*各模块的config最终会被合并进顶层选项再求值。Gleam 模块的关键设计在于lib.mkIf cfg.enable条件块内部直接声明languages.erlang.enable true这是一种语言依赖语言的模块间联动——从源码结构看它保证了 BEAM 运行时与 Gleam 编译器永远同时出现省去了用户手动配置 Erlang 的步骤也避免了两者版本不匹配导致的运行时错误。对比同目录下的 Erlang 模块src/modules/languages/erlang.nix可以看到 Erlang 模块会额外处理rebar3的编译版本对齐问题而 Gleam 模块保持极简仅声明包本身其余依赖交由 Erlang 模块负责。小结你想做的事配置写法启用 Gleam 工具链languages.gleam.enable true;使用指定版本的 Gleamlanguages.gleam.package 某个 package 表达式;同时获得可运行的 BEAM 环境无需额外配置enable true自动完成只需记住一个开关和一个包选项你就能在 devenv 中得到完整、可复现、跨机器一致的 Gleam 开发环境。更多语言模块的同类用法可参考 supported-languages 示例 与 语言配置总览如存在若需查看该模块的全部选项定义可阅读 模块源码。赞分享开发工具CLI【免费下载链接】devenvFast, Declarative, Reproducible, and Composable Developer Environments using Nix项目地址https://gitcode.com/gh_mirrors/de/devenv点击查看免费下载相关推荐5步构建医疗信息化系统OpenEMR开源电子病历实战指南5步构建医疗信息化系统OpenEMR开源电子病历实战指南 OpenEMR作为全球最受欢迎的开源电子健康记录系统为医疗机构提供了完整的企业级医疗信息管理解决方开发工具CLIdevenv 中配置 Lean 4 开发环境languages.lean4 模块详解devenv 中配置 Lean 4 开发环境languages.lean4 模块详解 本指南介绍如何在 Nix 驱动的开发者环境 devenv 中启用 Lea开发工具CLIgrpc-gateway 怎么给 runtime.ServeMux 添加自定义 HTTP 路由grpc gateway 怎么给 runtime.ServeMux 添加自定义 HTTP 路由 当你基于 grpc gateway 搭建网关后某些 HTTP开发工具CLI上一篇【亲测免费】 ZynAddSubFX 开源合成器项目推荐下一篇CppNumericalSolvers轻量级C非线性优化库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考