ClojureScript + momentjs(node.js)以.format(“dddd,MMMM Do YYYY,h:mm:ss a”)失败

我试图显示当前date时间格式控制node.js + clojure部署momentjs 。

工作节点js代码:

var moment = require("./lib/moment/moment.js"); console.log(moment().format("dddd, MMMM Do YYYY, h:mm:ss a")); 

控制台输出:

 $ node app1 Friday, July 5th 2013, 9:57:07 am 

所以,我尝试clojureScript代码如下:

 (ns rxcljs.core (:use [cljs.nodejs :only [require]]) ) (def log #(.log js/console %)) (def moment (require "./lib/moment/moment.js")) (->> (-> (moment) (.format "dddd, MMMM Do YYYY, h:mm:ss a") ) (log) ) 

控制台输出变成

 $ node app FridaynullundefinedJulyundefined5thundefined2013nullundefined9null56null31undefinedam 

由于某种原因,date时间部分呈现为一堆null未定义

编译js代码:

 var rxcljs = {core:{}}; rxcljs.core.log = function(a) { return console.log(a) }; rxcljs.core.moment = cljs.nodejs.require.call(null, "./lib/moment/moment.js"); rxcljs.core.log.call(null, rxcljs.core.moment.call(null).format("dddd, MMMM Do YYYY, h:mm:ss a")); 

发生问题的观点看起来没有问题:

 rxcljs.core.moment.call(null).format("dddd, MMMM Do YYYY, h:mm:ss a") 

任何想法? 谢谢。

这是由于Moment.js 2.0.0与ClojureScript的已知不兼容性,在David Altenburg的 这个提交中已经修复了。 这是提交信息:

格式函数现在在var上使用“instanceof”而不是在该var的调用上使用“typeof”来确定variables是否为函数。

这解决了与ClojureScript的不兼容问题,它将String.prototype.call定义为一个函数。

目前在开发分支的版本工作正常。