You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Flake部署Node.js/MongoDB时遇mkShell非函数错误求助

解决Nix Flake开发环境配置错误

错误原因

  1. 语法结构错误:你的outputs定义中,mkShell结束后直接追加了一个独立的配置set,导致Nix解析时误将mkShell返回的set当作函数调用,触发“attempt to call something which is not a function but a set”错误。
  2. 非自由软件配置位置错误:nixpkgs.config不能直接放在outputs顶层,需要在实例化nixpkgs时传入,才能让Nix识别非自由软件的允许规则。

修正后的配置

{
  description = "Installing Nodejs with a flake";

  inputs = {
    nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-23.11";
  };

  outputs = { self, nixpkgs-stable, ... }: let
    # 实例化带非自由软件配置的nixpkgs
    pkgs = import nixpkgs-stable {
      system = "x86_64-linux";
      config = {
        allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
          "mongodb"
          "mongosh" # 注意:mongosh也需要加入允许列表
        ];
      };
    };
  in {
    devShells.x86_64-linux.TestingNodejsFlake = pkgs.mkShell {
      buildInputs = [
        pkgs.nodejs
        pkgs.mongodb
        pkgs.mongosh
      ];
    };
  };
}

修改说明

  • 将nixpkgs的实例化逻辑放入let块,通过import传入config参数,指定允许的非自由软件包(包括mongosh,因为它同样属于非自由软件)。
  • 修正outputs的结构,确保devShells是顶层唯一的set成员,避免语法解析错误。
  • 所有包引用都改为从实例化后的pkgs中获取,确保使用的是带有非自由配置的包集合。

验证

保存修正后的flake.nix,执行以下命令测试:

nix develop

进入开发环境后,可通过node --version、mongod --version、mongosh --version验证软件是否正常安装。

内容的提问来源于stack exchange,提问作者Blomiir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:02:44