网站搜索

javascript - 我如何在运行于 NodeJS 的 ClojureScript 中读取 EDN 文件?


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

我应该使用什么替代品呢?

答案#1

你可以使用:

(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)

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

答案#2

或者更简单地使用 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")