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定义为一个函数。
目前在开发分支的版本工作正常。