有没有一种方法在Elm中使用JavaScript库?

19

我在使用Elm。我已经阅读了Elm中的端口,以及它们如何帮助在Elm和Javascript之间共享数据/消息。

我打算使用一个丰富的日期时间库,例如moment.js。请建议如何移植moment.js或其他替代方案?

3个回答

16

Elm没有任何丰富的日期时间库(据我所知),因此让我们进行移植。

我快速浏览了这个JavaScript库,发现它的大部分功能并不依赖于当前日期/时间,我认为这是日期时间库中唯一使用的副作用。因此,Elm的移植不会非常有用。

解决方案 1-将JS代码转换为Elm代码

这显然需要一些时间,但应该相当简单,因为大部分代码都没有副作用。

解决方案 2-Native Elm库(不再受支持)

更新:从Elm 0.19开始,不再支持创建自己的原生模块。

由于大多数函数都是纯的,因此编写本地库可能是最好的选择。这样,来自moment.js的函数可以在Elm中一一映射到函数。

警告:通常不建议使用本地库。
原因是直接调用JavaScript函数实际上是一种不安全的方式,没有编译器检查,您可能会引入任意的副作用,从而破坏语言。因此,这不是理想的选择。但是,如果确保只绑定到JavaScript库中的纯函数,则可以获得一些好处。
请查看示例本地库,例如elm-markdown,以了解如何编写本地库。您将需要在elm-package.json文件中指定"native-modules": true。如果要在package.elm-lang.org上发布库,需要进行审核和批准。您可以在邮件列表上申请。


值得注意的是,编写本地模块被该语言的创始人强烈反对,因为它只用于内核功能。请参阅https://discourse.elm-lang.org/t/native-code-in-0-19/826了解更多信息。 - viam0Zah

12

4

同时,Elm 0.18获得了一个合理的日期和时间处理库:elm-community/elm-time

而 Elm 0.19 则配备了一个新的核心时间处理库:elm/time


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接