案例研究—在 Haskell 应用程序中使用 JavaScript 组件 | Haskell 编程语言的博客

主要观点:GHC 9.8 起可创建从 JS 到 Haskell 代码的回调,能创建全功能浏览器应用,文中展示如何将 JS 后端与外部组件库结合使用。
关键信息

  • 仓库:https://github.com/Swordlash/...,使用 ghc 9.12.1(ghcup)
  • 示例 1 展示了用 GHC 与 JS 交互创建按钮并计数点击次数,还介绍了用 google-closure-compiler 压缩代码
  • 示例 2 展示了用 Google Material Components 库给按钮添加样式,遇到 google-closure-compiler 不识别导入的问题,通过创建 externs 文件解决,还介绍了用 swc-loader 替代 google-closure-compiler 进行打包和压缩
    重要细节
  • 在 GHC 中通过 foreign import 创建回调,可将 Haskell 级别的动作传递给 DOM 事件监听器
  • google-closure-compiler 压缩代码时需传入两个输入文件,一个是生成的 all.js,一个是声明外部变量的 all.externs.js,且编译 recent emscripten 时需添加 --language_in UNSTABLE
  • 使用 Material Components 库给按钮添加样式时,需创建特定的 HTML 结构,导入相关模块和样式,销毁元素时要调用 destroy 方法
  • 用 swc-loader 替代 google-closure-compiler 时,需在 webpack 文件中添加相应的 loader 和配置,且 swc-loader 能提供自己的 minifier 管道
  • 后续工作包括添加新的 cabal 字段 js-options 以实现条件编译,添加多行字符串支持到 inline foreign imports,与 npm 进行集成等,作者将继续维护和开发相关库
阅读 8
0 条评论