我已经开始学习一些关于snap框架的知识,我找到了一些关于blaze snap的教程,并希望构建一个小的web-app。
在更改html部分中的代码时,单调乏味的是我必须这样做
Ctrl+C
现有的Snap服务器,然后cabal run
重新启动它是一种更简单的方法。
我找到了以下util watchr,它允许在更改某个文件后运行命令 - 这绝对有用,但我不知道如何在这种情况下应用它。
获取最小的工作示例 - 使用snap init barebone
命令并将src/Main.hs
替换为
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad (forM_)
import Control.Applicative ((<|>))
import Snap.Core
import Snap.Util.FileServe
import Snap.Http.Server
import Snap.Blaze (blaze)
import qualified Data.Text as T
import qualified Text.Blaze.Html5 as H
main :: IO ()
main = quickHttpServe site
site :: Snap ()
site =
ifTop testHandler <|>
dir "static" (serveDirectory ".")
testHandler :: Snap ()
testHandler = blaze $ H.docTypeHtml $
do H.head $ H.title "SnaptestBlaze"
H.body $ do H.p "Blaze makes Html"
H.ul $ forM_ [1..10::Int] (H.li . H.toHtml)
并确保在相应的snap-blaze
文件中包含blaze-html
和*.cabal
。
我还看到有一个包snap-loader-dynamic
听起来很有希望,但我无法为所需的依赖项构建应用程序,并且cabal沙箱中的依赖项具有不同的哈希值。
从长远来看,我发现stack
最终会替换cabal
,但我没有足够的时间来检查stack
是否可以进行自动重建&amp;重新启动。
如果我正在开发的环境是相关的:Linux(Mint)+ cabal-sandbox。
答案 0 :(得分:4)
Snap本身附带此功能。假设您使用snap init
初始化项目,只需按
cabal install -fdevelopment
它会在必要时动态重新加载。
答案 1 :(得分:1)
丹尼尔的回答绝对是正确的。但是,如果您想要重新加载不涉及代码更改,那也是可能的。有关示例,请参阅this blog post。