使用Moment.js制作原生ELM模块

时间:2018-02-06 14:33:07

标签: javascript momentjs native elm

我已经和Elm玩了几天了,我想建立一个Moment.JS的端口,因为我看到缺少我想要的库,而且Moment只有我需要的一切

问题是我总是面临同样的错误。我的Native文件夹中有Moment.JS(名为MomentJS.js),另一个名为Moment.js的文件(我的包装器)。问题是当我在Moment.js中调用时刻时,我得到一个错误,表示该时刻未定义。

在Moment.js之前和/或之后,我也尝试在我的elm文件中导入MomentJS.js。我还尝试将整个JS复制到Moment.js并在其末尾添加我的包装器。这些都没有奏效。你知道我该怎么办?我一直在互联网上寻找类似的回购,但我从未见过有一个包装器的模块和另一个仅用于本机库的JS文件。

这是我的Moment.js代码:

io.stdout:write

和我的Moment.elm代码:

var _user$project$Native_Moment = (function() {

    var moment = require('moment');


    var format = function ( format, date ) {
        return moment().format();
    }

    return {
        format: format
    };

})();

我尝试的最后一件事是从npm下载Moment,将其文件夹从node_modules文件夹复制到我的Native文件夹并执行module Moment exposing (format) {-| A module desc @docs format -} import Native.MomentJS import Native.Moment {-| Call the default `Moment.js` format method -} format : String -> String -> String format fm dt = Native.Moment.format fm dt 但我得到了moment = require('moment')

有什么建议吗?

2 个答案:

答案 0 :(得分:5)

经过一番挖掘,你想做的事情完全可能是的! :)但是,它不会是一个简单的复制粘贴。看看你发布的源here,它需要将每个函数映射到本机榆树函数,我建议从这个转换开始。

首先,获取一个简单的hello world本机示例工作,请参阅here

其次,从moment.js逐个添加一些更简单的函数,我建议从moment \ src \ lib \ format \ format.js开始

最后,我知道这不是你想听到的,但如果你真的想在榆树中写javascript,也许榆树不是你想要的?我真的无法想象转换类似于Moment.js的整个库比创建自己的受Moment.js启发的Elm库更简单

无论哪种方式,祝你好运!无论如何,这似乎是一个有趣的挑战:)

答案 1 :(得分:2)

有两种支持方式让Elm和JavaScript相互通信:端口和标志。两者都是异步的,对您的需求来说很尴尬。

https://guide.elm-lang.org/interop/javascript.html

你应该编写本机代码吗?榆树的创造者says no

因此,最好的方法是使用现有的时间/日期库之一或自己编写所需的内容。