我可以使用clojurescript中的任意节点模块吗?

时间:2014-06-06 23:36:19

标签: clojurescript

是否可以在clojurescript项目中使用任意node.js模块?如果是的话,我该怎么做呢?如果没有,为什么不呢?

3 个答案:

答案 0 :(得分:9)

是的,你可以,没有什么特别之处:

(def fs (js/require "fs"))
(println (.readdirSync fs js/__dirname))

如果你没有使用优化,请小心外接。

编辑:leiningen是否与各种js包经理一起玩?:
不。由于语言没有包,所以无法知道。你必须做js依赖管理和lein deps。有lein-npmlein-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?