如何从 NodeJS 上运行的 ClojureScript 读取 EDN 文件?

sha*_*der 6 javascript node.js clojurescript

我有一个 EDN 格式的简单数据文件,我需要在 NodeJS 上运行的 ClojureScript cli 应用程序中读取,但 Clojure 中的相关核心库似乎都不可用(core.java.io/read、clojure.edn/read、 ETC。)

我应该用什么来代替?

Sym*_*rog 6

你可以使用:

(ns app.core
  (:require [cljs.reader :as reader]))

(def fs (js/require "fs"))

(defn read-edn [path f]
  (.readFile fs path "utf8" (fn [err data] (f (reader/read-string data)))))

(defn process [coll])

(read-edn "/tmp/x.clj" process)
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,process将接收从文件读取的数据结构。您需要实现process错误处理并将其添加到read-edn.


J d*_*eez 1

或者更容易使用readFileSync(shadow-cljs示例):

  (require '["fs" :as fs]
           '[cljs.reader :as reader])

  (defn read-edn [path]
    (-> (.readFileSync fs path "utf8")
        reader/read-string))

  (read-edn "/xxx/yyy/zzz/my-data.edn")


Run Code Online (Sandbox Code Playgroud)