Stack项目添加extra-deps失败:Acme.Missiles模块找不到求助
嘿,这个问题其实是新手用Stack搭建Haskell项目时很容易踩的两个小坑,我帮你拆解清楚:
为什么会出现这个矛盾情况?
1. 核心问题:你漏了在cabal文件里声明项目依赖
Stack的extra-deps字段只是告诉Stack:「如果这个包不在当前resolver对应的Stackage快照里,就额外下载它」,但这不等于把这个包设为你的项目依赖。编译器要找到Acme.Missiles模块,必须在你的项目.cabal文件(比如project1.cabal)的build-depends里明确声明这个包。
2. stack solver建议删除extra-deps的原因
你的当前resolver对应的Stackage快照里大概率已经包含了acme-missiles包,所以Stack认为你手动添加的extra-deps是多余的,因此建议删除。你可以用这个命令验证:
stack query packages | grep acme-missiles
如果能输出这个包的版本信息,就说明它已经在默认包集中了。
解决步骤
第一步:修改cabal文件添加依赖
打开你的project1.cabal,找到executable project1区块,在build-depends里加入Acme.Missiles:
executable project1 main-is: Main.hs build-depends: base >= 4.14 && < 5, Acme.Missiles # 新增这一行 hs-source-dirs: app default-language: Haskell2010
第二步:调整extra-deps配置
- 如果之前的
stack query命令查到了acme-missiles,就按照solver的建议,删除stack.yaml里的extra-deps: - acme-missiles-0.3; - 如果没查到,说明这个包不在当前resolver的快照里,保留
extra-deps的配置即可(确认版本号0.3是正确的)。
第三步:重新构建项目
运行以下命令,之后就能正常导入并使用launchMissile了:
stack build
内容的提问来源于stack exchange,提问作者godzsa
相关产品推荐
相关产品推荐

