ClojureScript + momentjs (node.js) завершается с ошибкой.format("dddd, MMMM Do YYYY, h:mm:ss a")
Я пытаюсь показать текущий формат даты и времени для консоли на node.js + clojure, развертывающих моменты.
Код 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
По некоторым причинам Datetime частично представлен множеством значений 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")
Любая идея? Благодарю.
1 ответ
Это связано с известной несовместимостью Moment.js 2.0.0 с ClojureScript, исправленной в этом коммите Дэвидом Альтенбургом. Вот сообщение коммита:
Функция форматирования теперь использует "instanceof" в var, а не "typeof" в вызове этого var, чтобы определить, является ли переменная функцией.
Это исправляет несовместимость с ClojureScript, который определяет String.prototype.call как функцию.
Версия, которая сейчас находится в разработке, работает нормально.