1

我正在尝试在 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

由于某种原因,日期时间部分显示为一堆nullundefined 。

编译好的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")

任何想法?谢谢。

4

1 回答 1

3

这是由于已知 Moment.js 2.0.0 与 ClojureScript 不兼容,David Altenburg在此提交中修复了该问题。这是提交消息:

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

这修复了与 ClojureScript 的不兼容问题,后者将 String.prototype.call 定义为一个函数。

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

于 2013-07-05T04:31:26.807 回答