javascript - Hvordan læser jeg en EDN-fil fra ClojureScript, der kører på NodeJS?


Jeg har en simpel datafil i EDN-format, som jeg har brug for at læse i en ClojureScript CLI-app, der kører på NodeJS, men ingen af de relevante kernebiblioteker fra Clojure ser ud til at være tilgængelige (core.java.io/read, clojure.edn/read osv.)

Hvad skal jeg bruge i stedet?

Svar #1

Du kunne bruge:

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

I eksemplet ovenfor ville process modtage datastrukturen, der blev læst fra filen. Du ville være nødt til at implementere process og tilføje fejlhåndtering til read-edn.

Svar #2

Eller endnu nemmere brug readFileSync (shadow-cljs eksempel):

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