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

无法为Nix-build项目安装包,构建Obelist项目遇依赖错误求助

解决Obelist项目的Nix编译与依赖问题

看起来你在Obelisk项目的编译和依赖管理上踩了两个常见的坑,我来帮你逐一解决:

1. 处理Control.Monad.Trans模块找不到的错误

你遇到的第一个编译错误,是因为Control.Monad.Trans模块属于transformers包,而非你尝试安装的Control包(这个包完全不是你需要的)。更关键的是:在Obelisk项目里绝对不要用cabal单独安装依赖——Obelisk是通过Nix来管控所有依赖(包括Haskell包和系统依赖)的,cabal无法适配它的定制环境。

正确的修复步骤:

  • 检查项目根目录的default.nix或project.nix文件,确认transformers已被包含在依赖列表中。如果没有,添加进去:
    # 在项目的build-depends区域添加
    build-depends = [
      # 其他已有的依赖...
      pkgs.haskellPackages.transformers
    ];
    
  • 如果你是用Obelisk模板创建的项目,transformers通常已经是base的间接依赖,但GHCJS环境偶尔需要显式声明。可以尝试清理缓存后重新编译:
    nix-shell --run "obelisk clean"
    nix-build -o frontend-result -A ghcjs.frontend
    

2. 解决cabal安装时obelisk-route依赖失败的问题

obelisk-route是Obelisk框架的内部私有包,它并没有发布到Hackage公共仓库,所以cabal根本找不到它——这就是直接用cabal new-install失败的核心原因。

正确的做法是:

  • 立刻停止用cabal单独操作依赖的尝试,所有依赖管理都通过Nix或Obelisk提供的命令完成。
  • 确保你的项目符合Obelisk的规范结构:根目录应有default.nix、backend、frontend等目录,所有依赖都通过Nix表达式声明。
  • 如果是刚启动的项目,建议重新用Obelisk模板初始化,保证环境完全正确:
    obelisk init obelist-project
    cd obelist-project
    # 把你的现有代码迁移到这个模板项目中
    

额外实用提示

在Obelisk项目中,所有编译、开发操作都应该用框架提供的命令:

  • 启动前端开发服务器:obelisk run frontend
  • 启动后端服务:obelisk run backend
  • 进入带完整依赖的开发shell:obelisk shell
  • 编译生产版本前端:nix-build -o frontend-result -A ghcjs.frontend

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:03:41