尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

devenv 中的 Solidity 开发环境配置:启用 solc 与 Foundry 的完整指南

devenv 中的 Solidity 开发环境配置:启用 solc 与 Foundry 的完整指南 开发工具CLI【免费下载链接】devenvFast, Declarative, Reproducible, and Composable Developer Environments using Nix项目地址https://gitcode.com/gh_mirrors/de/devenv点击查看免费下载导读本文讲解如何在基于 Nix 的声明式开发环境 devenv 中启用 Solidity 开发工具链。你将掌握languages.solidity模块的四个核心配置项启用开关、solc 编译器选择、Foundry 工具集开关与包选择了解它们如何被翻译成环境中的可执行包并通过实际示例快速搭建一个可复现的 Solidity 开发环境。无论你是编写智能合约、运行 Foundry 测试还是需要为多个合约项目维护一致的工具链版本本文给出的配置与原理都能直接落地使用。模块概览languages.solidity 提供什么在 devenv 中语言工具链统一通过languages.language命名空间配置Solidity 模块同样遵循这一约定。该模块的完整定义位于 src/modules/languages/solidity.nix官方文档自动生成于 docs/src/content/docs/languages/solidity.md源模板为 docs/src/individual-docs/languages/solidity.md。从模块源码看languages.solidity一共暴露四个选项作用归纳如下配置项类型默认值作用languages.solidity.enablebooleanfalse是否启用 Solidity 开发工具languages.solidity.packagepackagepkgs.solc使用哪个 Solidity 编译器languages.solidity.foundry.enablebooleanfalse是否安装 Foundry 工具集languages.solidity.foundry.packagepackagefoundry.defaultPackage.${pkgs.stdenv.system}使用哪个 Foundry 包其中foundry子选项的实现细节位于 src/modules/languages/solidity.nix后续章节会分别展开。启用 Soliditylanguages.solidity.enablelanguages.solidity.enable是布尔类型的开关默认值为false即默认不引入任何 Solidity 工具。它的实际效果由模块底部的config段决定src/modules/languages/solidity.nixconfig lib.mkIf cfg.enable { packages [ cfg.package ] lib.optional cfg.foundry.enable (cfg.foundry.package); };也就是说一旦enable true模块会向开发环境注入一个包列表默认情况下至少包含 Solidity 编译器solc如果foundry.enable同时为真则再追加 Foundry 包。这些包最终会以可执行文件的形式出现在你的 shell PATH 中。在项目中启用它的最小配置如下{ languages.solidity.enable true; }更完整的用法可见 examples/solidity/devenv.nix{ pkgs, lib, ... }: { languages.solidity { enable true; foundry.enable true; }; }配置保存后运行devenv shell或使用 direnv 自动加载即可进入带有solc的开发环境可用solc --version验证编译器是否就绪。选择编译器languages.solidity.packagelanguages.solidity.package的类型是package用于指定项目使用的 Solidity 编译器默认值为pkgs.solc见 src/modules/languages/solidity.nix。绝大部分场景下你无需改动此选项直接使用 Nixpkgs 提供的solc即可。需要自定义时可以替换为任何满足package类型的值例如{ languages.solidity.enable true; # 使用 Nixpkgs 中特定版本的 solc若存在 languages.solidity.package pkgs.solc; }需要说明的是solc的具体版本由项目锁定的 Nixpkgs 决定这保证了同一devenv.nix加锁文件在不同机器上产生完全一致的工具链版本——这正是 devenv 可复现性的体现。若你的项目需要固定某个编译器版本应通过调整 Nixpkgs 输入或覆盖pkgs.solc实现而不是在环境内手工安装。启用 Foundrylanguages.solidity.foundry.enableFoundry 是 Solidity 生态中集测试、部署、脚本于一体的主流工具链forge、cast、anvil等。languages.solidity.foundry.enable为布尔开关默认false置为true后模块会把 Foundry 包追加到环境包列表中{ languages.solidity.enable true; languages.solidity.foundry.enable true; }开启后环境中将出现forge、cast、anvil等命令可直接用于初始化合约项目forge init、编译测试forge test与本地链模拟anvil。选择 Foundry 包languages.solidity.foundry.packagelanguages.solidity.foundry.package的类型同样是package默认值为foundry.defaultPackage.${pkgs.stdenv.system}。这里的foundry不是 Nixpkgs 自带的包而是 devenv 通过输入机制引入的一个外部 flake 输入。默认来源foundry.nix flake 输入看模块顶部src/modules/languages/solidity.nixfoundry config.lib.getInput { name foundry; url github:shazow/foundry.nix; attribute languages.solidity.foundry.package; follows [ nixpkgs ]; };也就是说默认的 Foundry 包来自github:shazow/foundry.nix这个 flake并且其nixpkgs输入跟随follows主项目的 Nixpkgs从而尽量与主环境共享同一套依赖。对应地在devenv.yaml中需要声明该输入见 examples/solidity/devenv.yamlinputs: foundry: url: github:shazow/foundry.nix inputs: nixpkgs: follows: nixpkgs如果你的项目直接复制了该配置锁文件会固定foundry.nix的具体版本保证团队所有成员拿到相同的 Foundry。一个值得注意的修补细节模块并非原样使用foundry.defaultPackage.${pkgs.stdenv.system}而是先对其做了一次overrideAttrssrc/modules/languages/solidity.nixfoundryPackage foundry.defaultPackage.${pkgs.stdenv.system}.overrideAttrs (old: { nativeBuildInputs (old.nativeBuildInputs or [ ]) lib.optional pkgs.stdenv.hostPlatform.isLinux pkgs.udev; });代码注释说明了原因近期 Foundry 二进制会链接libudev而foundry.nix尚未把udev加入 auto-patchelf 的搜索路径因此在 Linux 平台上devenv 主动把udev追加到nativeBuildInputs避免启动forge/anvil时报动态链接库缺失错误。这是模块为兼容性所做的隐式修补普通用户一般不需要关心但理解它有助于排查“Foundry 装上却无法运行”的问题。自定义 Foundry 包与编译器一样你可以显式覆盖默认包{ languages.solidity.enable true; languages.solidity.foundry.enable true; languages.solidity.foundry.package pkgs.callPackage ...; # 或任何合法 package }覆盖后模块config段中的lib.optional逻辑会原样把你指定的包加入环境。与其他模块的协同一个完整示例Solidity 开发通常还伴随 Node.js 工具链如 Hardhat、Ethers。devenv 允许你在同一份配置中叠加多个语言模块。参考 examples/supported-languages/devenv.nix 中languages.solidity.enable true的用法可将 Solidity 与 JavaScript 组合{ pkgs, ... }: { languages.solidity.enable true; languages.solidity.foundry.enable true; languages.javascript.enable true; languages.javascript.npm.enable true; }这样进入devenv shell后既能用solc/forge处理合约也能用npm管理 Hardhat 等上层工具。所有工具的版本都由锁文件固定实现了团队级的一致环境。使用建议与注意事项模块默认不启用四个选项中有两个布尔开关均默认false因此只有显式enable true后solc或 Foundry 才会进入 PATH。版本由锁文件决定solc版本来自 NixpkgsFoundry 版本来自foundry.nix输入均受devenv.lock约束升级版本应通过更新锁文件完成而不是在 shell 内手工安装。Foundry 依赖enablefoundry.enable true但languages.solidity.enable false时模块整体不会生效因为config段整体受cfg.enable的mkIf保护。Linux 下 Foundry 的udev修补模块已自动追加udev到nativeBuildInputs如果遇到 Foundry 二进制启动失败可优先检查该修补是否生效。配置入口模块源码 src/modules/languages/solidity.nix、示例项目 examples/solidity/devenv.nix 与输入声明 examples/solidity/devenv.yaml 可作为后续查阅与扩展的参考。通过以上配置你可以用纯声明式的方式为合约项目建立起包含solc与 Foundry 的可复现开发环境团队成员只需devenv shell即可获得完全一致的工具链。赞分享开发工具CLI【免费下载链接】devenvFast, Declarative, Reproducible, and Composable Developer Environments using Nix项目地址https://gitcode.com/gh_mirrors/de/devenv点击查看免费下载相关推荐devenv 中启用 Jsonnet 开发环境languages.jsonnet 配置完全指南devenv 中启用 Jsonnet 开发环境languages.jsonnet 配置完全指南 本文讲解如何在 devenvFast, Declarativ开发工具CLIChatWeb 项目常见问题解决方案ChatWeb 项目常见问题解决方案 1. 项目基础介绍和主要编程语言 ChatWeb 是一个开源项目旨在通过爬取网页、读取PDF、DOCX、TXT文件并提取开发工具CLICANN/asc-devkit REGISTER_NONE_TILING APIREGISTER\_NONE\_TILINGa nameZH CN_TOPIC_0000002473236240 /a 产品支持情况a name开发工具CLI上一篇重新想象声音当开源精神遇见智能音频的无限可能下一篇Gumroad创作者变现的完整解决方案如何快速搭建你的数字产品销售平台创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表