是否有类似于 `cabal 运行` 的 `stack 运行`?

Is there a `stack run` similar to `cabal run`?

直到最近,我一直在执行这个 beauty 来构建 + 运行 一个带有堆栈的项目:

stack build && .stack-work/install/x86_64-linux/lts-4.1/7.10.3/bin/<project-name>

我在 IRC 上被告知这可以简化为

stack build && stack exec <project-name>

能不能再简化一下,变成

stack run

或至少

stack run <project-name>

?

如果我没记错的话,cabal run 是可能的。

编辑:

@haoformayor 的评论越来越近了:

alias b='stack build --fast --ghc-options="-Wall" && stack exec'

虽然这个还是需要项目名吧?

我也开始亲近

function stack-run () { stack build && stack exec `basename "$PWD"` }

尽管这仅在项目名称与文件夹名称匹配时才有效。也许我们可以查询 cabal/stack 以获取 .cabal 文件中的第一个 executable 条目?或者也许我们可以用 sed...

正如此处提到的 http://docs.haskellstack.org/en/stable/README.html#quick-start-guide,您可以使用 stack exec my-project-exe,其中 my-project-exe 是 .cabal 文件中可执行文件的名称。

您可以使用 --exec 告诉堆栈什么程序应该是 运行 成功构建后:

stack build --exec <executable-name>

您还可以为可执行文件指定参数,例如

stack unpack pandoc && cd pandoc*
stack build --exec "pandoc --version"

cabal run 相比,这可能是最接近的,因为 stack exec--exec 标志都需要一个可执行名称。然而,最干净的变体是一个额外的 stack-run 命令,它执行 stack build --exec <first-executable in .cabal>。在项目的 GitHub 问题跟踪器上可能值得 a feature request

我有很好的使用经验:

https://hackage.haskell.org/package/stack-run


编辑 2018-04-05:Relevant stack issue.


旧答案:

这就是我现在所做的。

#/usr/bin/env sh

stack build && stack exec `basename "$PWD"` "$@"

我已将以下内容放入我的 $PATH 下名为 stack-run 的文件中。 ~/.local/bin/stack-run 就我而言。

这让我可以

$ stack-run

在任何目录中,甚至

$ stack run

因为在我几乎所有的项目中,项目的可执行文件都与文件夹同名,所以这很有效。但我希望通过对不同名称的支持来扩展它。


编辑 2016-09-26: 我也找到了这个,但还没有尝试过: https://hackage.haskell.org/package/stack-run