是否可以在clojurescript项目中使用任意node.js模块?如果是的话,我该怎么做呢?如果没有,为什么不呢?
答案 0 :(得分:9)
是的,你可以,没有什么特别之处:
(def fs (js/require "fs"))
(println (.readdirSync fs js/__dirname))
如果你没有使用优化,请小心外接。
编辑:leiningen是否与各种js包经理一起玩?:
不。由于语言没有包,所以无法知道。你必须做js依赖管理和lein deps。有lein-npm和lein-bower来帮助整合这两个包管理器。
答案 1 :(得分:1)
从ClojureScript 1.9.854开始,有更好的支持将npm模块声明为依赖项并从命名空间中要求它们。
为了将其声明为依赖项,如果需要:npm-deps
/ :install-deps
,则需要使用lein
编译器选项(以及boot
编译器选项)自动安装它。)
:npm-deps
是从关键字到字符串的映射,其中关键字是您将使用npm
安装它的依赖项的名称,字符串是依赖项的版本。
您可以添加到project.clj
(如果您使用lein-cljsbuild)的示例,以便使用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)
参考文献:
答案 2 :(得分:0)
是的,自2017年末以来。使用shadow-cljs或Lumo,现在在ClojureScript代码中导入npm模块并不成问题。
(ns app.main
(:require ["dayjs" :as dayjs]
["shortid" :as shortid]
["lodash" :as lodash]
["lodash" :refer [isString]]))
阅读此主题以获取详细信息:Guide on how to use/import npm modules/packages in ClojureScript?