我正在尝试在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
由于某种原因,日期时间部分由 null 和 undefined 组成。
编译的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")
有什么想法吗?感谢。
答案 0 :(得分:3)
这是由于Moment.js 2.0.0与ClojureScript的已知不兼容性,this commit由David Altenburg修复。这是提交消息:
格式化函数现在在var而不是“typeof”上使用“instanceof” var调用以确定变量是否为函数。
这修复了与ClojureScript不兼容的问题 String.prototype.call作为函数。
当前在开发分支中的版本工作正常。