17

我正在和榆树一起工作。我已经阅读了Elm 中的端口以及它们如何帮助在 Elm 和 Javascript 之间共享数据/消息。

我打算使用像moment.js 这样的丰富的日期时间库。建议如何移植 moment.js 或任何其他替代方案?

4

3 回答 3

16

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

我快速浏览了这个 JavaScript 库,看起来它的大部分功能并不依赖于当前的日期/时间,我希望这是日期时间库中使用的唯一副作用。所以 Elm 端口不会很有帮助。

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

这显然需要一些时间,但应该相当简单,因为它主要是无副作用的代码。

解决方案 2 - 原生 Elm 库(不再支持)

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

由于大多数函数都是纯函数,因此您最好编写一个 Native 库。这样,moment.js 中的函数可以一对一映射到 Elm 中的函数。

警告:通常不鼓励使用本机库。
原因是直接调用 JavaScript 函数确实是一种不安全的方式,没有编译器检查,可以引入任意副作用,这会弄乱语言。所以并不理想。但是如果你确保你只绑定到 JavaScript 库中的纯函数,你就可以摆脱它。
查看一个示例本机库,例如elm-markdown以了解如何编写。您将需要文件"native-modules": true中的指示elm-package.json。如果您想在package.elm-lang.org上发布该库,则需要先对其进行检查和批准。您可以在邮件列表中要求。

于 2014-12-30T11:33:06.453 回答
11

不要在 Elm 中重写库。榆树与外部世界相处得很好。看看 Elm 端口:https ://guide.elm-lang.org/interop/ports.html

于 2016-04-06T18:21:24.650 回答
3

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

Elm 0.19 带有一个新的核心时间处理库:elm/time

于 2018-08-16T11:36:20.563 回答