在 Haskell 堆栈中为 1 个包设置编译器
Set compiler for 1 package in Haskell Stack
我正在尝试完全使用 Haskell 编写一个小型 Web 应用程序。我有 3 个逻辑包:
- 后端,使用
servant
- 一个前端,使用
reflex
、reflex-dom
和 servant-reflex
- 定义 Servant API 的共享包,用于 2 和一些数据类型之间的通信,供 API 使用。
最后一个包裹给我带来了麻烦。我不知道如何构建项目以便其他 2 个包可以使用它。我现在看到 2 个选项:
- 每个包都有自己的堆栈文件和 git 存储库。使用
extra-deps
git link 导入共享包。这种方法的问题在于它意味着我必须将对共享包的任何更改推送到 GitHub,然后才能使用其他包对其进行测试。此外,我必须单独构建所有内容。
- 使用单个存储库和单个 stack.yml 文件。我更喜欢这个,因为它把所有东西放在一起,还确保所有包都使用相同的解析器。在这种情况下,我会在
packages:
选项中列出所有包。但是,客户端需要使用 GHCJS 而不是 GHC 进行编译,而且我在文档中没有看到针对 1 个特定包覆盖编译器的选项。
有没有办法使选项 2 起作用?或者有更好的方法吗?
推荐的方法是有两个堆栈项目文件(例如 stack-frontend.yaml
使用 GHCJS 和 stack-backend.yaml
使用 GHC),然后使用 --stack-yaml
参数在它们之间切换(例如使用 stack --stack-yaml=stack-frontend.yaml build
构建前端,使用 stack --stack-yaml=stack-backend.yaml build
构建后端)。两个 stack-*.yaml
文件都可以包含共享仆人 API.
我正在尝试完全使用 Haskell 编写一个小型 Web 应用程序。我有 3 个逻辑包:
- 后端,使用
servant
- 一个前端,使用
reflex
、reflex-dom
和servant-reflex
- 定义 Servant API 的共享包,用于 2 和一些数据类型之间的通信,供 API 使用。
最后一个包裹给我带来了麻烦。我不知道如何构建项目以便其他 2 个包可以使用它。我现在看到 2 个选项:
- 每个包都有自己的堆栈文件和 git 存储库。使用
extra-deps
git link 导入共享包。这种方法的问题在于它意味着我必须将对共享包的任何更改推送到 GitHub,然后才能使用其他包对其进行测试。此外,我必须单独构建所有内容。 - 使用单个存储库和单个 stack.yml 文件。我更喜欢这个,因为它把所有东西放在一起,还确保所有包都使用相同的解析器。在这种情况下,我会在
packages:
选项中列出所有包。但是,客户端需要使用 GHCJS 而不是 GHC 进行编译,而且我在文档中没有看到针对 1 个特定包覆盖编译器的选项。
有没有办法使选项 2 起作用?或者有更好的方法吗?
推荐的方法是有两个堆栈项目文件(例如 stack-frontend.yaml
使用 GHCJS 和 stack-backend.yaml
使用 GHC),然后使用 --stack-yaml
参数在它们之间切换(例如使用 stack --stack-yaml=stack-frontend.yaml build
构建前端,使用 stack --stack-yaml=stack-backend.yaml build
构建后端)。两个 stack-*.yaml
文件都可以包含共享仆人 API.