我已经和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')
。
有什么建议吗?
答案 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。
因此,最好的方法是使用现有的时间/日期库之一或自己编写所需的内容。