在ClojureScript项目中是否可以使用任意的Node.js模块?如果可以,我该如何包含它们?如果不行,为什么?
在ClojureScript项目中是否可以使用任意的Node.js模块?如果可以,我该如何包含它们?如果不行,为什么?
可以,这没有什么特殊的要求:
(def fs (js/require "fs"))
(println (.readdirSync fs js/__dirname))
如果您不使用优化功能,请小心处理外部变量。
编辑:Leiningen是否与各种JavaScript软件包管理器兼容?
不兼容。由于该语言没有软件包,它无法知道。您需要进行js依赖项管理以及lein deps。有一个lein-npm和一个lein-bower可帮助集成这两个软件包管理器。
是的,自2017年末以来,使用shadow-cljs或Lumo,将npm模块导入到ClojureScript代码中已经不再是问题了。
(ns app.main
(:require ["dayjs" :as dayjs]
["shortid" :as shortid]
["lodash" :as lodash]
["lodash" :refer [isString]]))
请阅读此主题了解详情:如何在ClojureScript中使用/导入npm模块/包的指南?
:npm-deps
编译器选项(连同:install-deps
选项一起使用,如果您想让 lein
/ boot
自动安装它)。
:npm-deps
是从关键字到字符串的映射,其中关键字是您将使用 npm
安装它的依赖项名称,字符串是依赖项的版本。project.clj
添加以下内容,以使用left-pad:。:cljsbuild {:builds [{:id "prod"
:source-paths ["src"]
:compiler {:main left-pad-demo.core
:output-to "package/index.js"
:target :nodejs
:output-dir "target"
:optimizations :simple
:install-deps true
:npm-deps {:left-pad "1.2.0"}
:pretty-print true}}]})
然后,从你的命名空间中,你可以像这样要求它:
(ns left-pad-demo.core
(:require left-pad))
(ns left-pad-demo.core
(:require ["left-pad" :as lp]))
(ns left-pad-demo.core
(:require left-pad))
(defn -main [s length]
(console.log (left-pad s length)))
(set! *main-cli-fn* -main)
参考资料:
(readdirSync js/__dirname)
。 - George