如何在Nix Shell中同步Node与Yarn的Node版本?
解决Yarn与全局NodeJS版本不一致的问题
你的问题出在Nix打包的nodePackages.yarn默认绑定了它自身依赖的NodeJS版本,和你单独指定的nodejs-17_x不是同一个。要同步版本,需要通过Nix覆盖层(overlay)强制让Yarn使用你指定的NodeJS版本,修改后的replit.nix配置如下:
{ pkgs }: let # 定义覆盖层,替换Yarn依赖的NodeJS版本 yarnNodeOverlay = final: prev: { nodePackages = prev.nodePackages // { yarn = prev.nodePackages.yarn.overrideAttrs (oldAttrs: rec { nodeDependencies = oldAttrs.nodeDependencies // { nodejs = final.nodejs-17_x; }; }); }; }; # 应用覆盖层后的新pkgs集合 modifiedPkgs = pkgs.extend yarnNodeOverlay; in { deps = [ modifiedPkgs.nodejs-17_x modifiedPkgs.nodePackages.yarn ]; }
配置说明
- 通过
pkgs.extend创建包含自定义覆盖层的新包集合modifiedPkgs - 覆盖层里用
overrideAttrs修改yarn的nodeDependencies,将其依赖的nodejs替换为你需要的nodejs-17_x - 最后在
deps里引用修改后的包,确保Yarn和全局NodeJS使用同一版本
修改完成后重新加载环境,执行yarn node -v应该就会返回17.3.1,和node -v版本一致了。
内容的提问来源于stack exchange,提问作者Tristan F.-R.
相关产品推荐
相关产品推荐

