文章目录
1. Stack用户指南
1.1 关于Stack的一点认知
稍微回顾一下Stack的功能——它能够管理工具链(包括GHC和Windows用户的MSYS)、构建和注册库、创建构建工具的依赖 building build tool dependencies
等等,Stack有能力提供你所需的所有Haskell工具,即一站式服务 one-stop shop
。
要构建一个项目,Stack使用项目根目录中的 stack.yaml
文件作为蓝图,该文件包含一个引用,也称为解析器 resolver
,该引用指向将用来构建你的包的快照 snapshot
。
Stack还是隔离的,它不会在特定的Stack目录之外进行更改。Stack生成的文件通常位于Stack根目录 stack root directory
中(默认在Windows上是 %LOCALAPPDATA%\Programs\stack
)或者每个项目的 ./.stack-work
目录中。其中,Stack根目录保存着属于快照 snapshots
的包、通过Stack安装的各种版本的GHC any stack-installed versions of GHC
。Stack不会篡改GHC的任何系统版本,也不会干扰Cabal-install安装的软件包或其他任何构建工具。
1.2 使用Stack构建一个Hello World项目
如何开始一个项目,用到的命令如下:
stack new my-project # 创建一个新目录(新项目),包含正确启动项目所需的所有文件
cd my-project # 进入该项目
stack setup # 在一个隔离环境中下载GHC编译器(或者直接使用全局安装的GHC)和其他相关的库,不会干扰任何系统级安装
# stack path # 输出有关安装路径的许多信息
stack build # 构建这个项目,如果之前没有使用stack setup安装编译器的话,这里会由stack自动安装对应版本的GHC
stack exec my-project-exe # 执行程序
安装了Stack后,我们将创建一个新的Hello World项目(从一个模板),并且遍览大多数常用的Stack命令,具体介绍以Stack为中心 Stack-centric
的典型工作流。
① stack new
创建新项目的起点是 stack new
命令,项目会包含一个和项目同名的Haskell包(也是一个文件夹),因此首先要选择一个有效的包名。顺带一提,stack new
不接受像 Learn_Haskell
这样的名字:
有效包名的规则如下,要求 one or more alphanumeric words separated by hyphens
:
我们将给项目起名为 hello-world
(相应的包名和文件夹也名为 hello-world
) ,然后使用 new-template
项目模板。 从下面的安装过程可以发现,这个Stack命令需要进行相当多的初始设置——它下载了一个名为 new-template
的模板并以此来创建项目 hello-world
,然后寻找 .cabal
或 package.yaml
文件来初始化这个项目,之后搜寻最佳快照(匹配到镜像源的页面),从中选择了解析器,初始化使用解析器的配置并写入到 hello-world\stack.yaml
文件中:
C:\CodeWorld\Code_Haskell>stack new hello-world new-template
Downloading template "new-template" to create project "hello-world" in hello-world\ ...
Looking for .cabal or package.yaml files to use to init the project.
Using cabal packages:
- hello-world\
Selecting the best among 20 snapshots...
* Matches https://mirrors.tuna.tsinghua.edu.cn/stackage/stackage-snapshots/lts/18/3.yaml
Selected resolver: https://mirrors.tuna.tsinghua.edu.cn/stackage/stackage-snapshots/lts/18/3.yaml
Initialising configuration using resolver: https://mirrors.tuna.tsinghua.edu.cn/stackage/stackage-snapshots/lts/18/3.yaml
Total number of user packages considered: 1
Writing configuration to file: hello-world\stack.yaml
All done.
C:\sr\templates\new-template.hsfiles: 6.06 KiB downloaded...
② stack build
现在我们在 hello-world
文件夹中有了一个项目,开始运行最重要的Stack命令 stack build
。为了构建项目,Stack需要一个GHC,如果Stack发现你缺少了什么,就会为你进行安装。当然,也可以使用 stack setup
命令手动执行此操作。stack build
一旦安装了GHC,就会开始构建项目。需要注意的是,GHC会安装在你的全局Stack根目录