我正在尝试在Haskell中完全编写一个小型Web应用程序 . 我有3个逻辑包:
-
后端,使用
servant
-
前端,使用
reflex
,reflex-dom
和servant-reflex
-
定义Servant API的共享包,用于在2和要使用的API的某些数据类型之间进行通信 .
最后一个包给我带来了麻烦 . 我不知道如何构建项目,所以其他2个包可以使用它 . 我现在看到两个选项:
-
每个包都有自己的堆栈文件和git存储库 . 使用
extra-deps
git链接导入共享包 . 这种方法的问题是它意味着我必须将对共享包的任何更改推送到GitHub,然后才能使用其他包测试它 . 另外,我必须单独构建所有内容 . -
将单个存储库与单个stack.yml文件一起使用 . 我更喜欢这个,因为它将所有内容保持在一起并且还确保所有包都使用相同的解析器 . 在这种情况下,我会列出
packages:
选项中的所有包 . 但是,客户端需要使用GHCJS而不是GHC进行编译,并且我没有在文档中看到一个选项来覆盖1个特定包的编译器 .
有没有办法让选项2工作?或者有更好的方法吗?
1 回答
推荐的方法是有两个堆栈项目文件(例如
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 .