是否可以使用 Ghcjs、Haste、Elm 等在服务器端渲染 Haskell 前端?

Posted

技术标签:

【中文标题】是否可以使用 Ghcjs、Haste、Elm 等在服务器端渲染 Haskell 前端?【英文标题】:Is it possible to server-side render Haskell frontend with Ghcjs, Haste, Elm, etc? 【发布时间】:2015-12-24 01:09:37 【问题描述】:

我认为 Haskell 提供了很棒的功能。也适用于 Web 开发。但是,我错过了一个功能。服务器端渲染。 原因是谷歌索引爬虫和预渲染以提高移动设备的性能。

是否可以使用 Ghcjs、Haste、Elm 或其他一些 Haskell->JS 编译器在服务器端渲染 Haskell 前端?

【问题讨论】:

【参考方案1】:

我不相信亚历山大已经回答了这个问题。

问题是 Haskell Web 框架是否执行 javascript 的服务器端渲染 - vanilla JS 或 JS-via-Haskell(GHCJS、Fay 等)。我的理解是 Yesod 不会预渲染 JS(即执行 JS 并提供生成的 html)。相反,Yesod 通过 hamlet(或 blaze-html,或 lucid,取决于您的偏好)在服务器端生成 HTML。

我能找到的用于 Haskell 服务器端 JS 渲染(用于 Angular)的唯一库是:

https://github.com/danchoi/ngrender

但它仍处于测试阶段。

如果还有其他库/解决方案,我很乐意了解它们。这对我来说也是一个问题。我想在客户端使用 purescript-halogen,但是... SEO。

编辑:目前,最好的选择可能是在 Haskell 服务器前使用 nginx 作为负载平衡器,使用 prerender.io 为搜索机器人提供渲染的 JS 页面:

https://github.com/prerender/prerender

https://gist.github.com/thoop/8165802

【讨论】:

【参考方案2】:

Stock Yesod 脚手架对 HTML 进行服务器端渲染,并为 HTML、CSS 和 JS 提供自定义的预处理语言。考虑到 Fay/Purescript 已经存在了一段时间,并且 yesod 至少为其中一个提供了脚手架,您应该能够毫无问题地集成 Fay/Purescript。

对于诸如 GHCJS 集成之类的东西,您会看到在即将发布的 stack 工具(例如 this issue)版本中取得了很大进展。从理论上讲,这将使全栈 Haskell 可以轻松实现。现在,据我了解,集成 GHCJS 并非易事。

【讨论】:

以上是关于是否可以使用 Ghcjs、Haste、Elm 等在服务器端渲染 Haskell 前端?的主要内容,如果未能解决你的问题,请参考以下文章

jest-haste-map: Haste 模块命名冲突 (AWS, RN)

如何修复 React Native 错误“jest-haste-map:Haste 模块命名冲突”?

jest-haste-map:加速模块命名冲突

node.js 中的 Haste 模块映射是啥?

在 Elm 中没有消息的 Cmd

Haste 模块命名冲突:将本机应用程序与 AWS 服务反应(放大项目)