假设有一个我想要使用的API,它在Node.js中可用,但不能用于clojure ring。有没有办法在clojure环中使用它?
发布于 2020-02-08 11:29:05
如果您想直接使用npm
模块,最好的选择是使用ClojureScript。ClojureScript是一个将Clojure代码编译成JavaScript的Clojure库。它提供了与Node.js的无缝集成。不用说,您需要同时安装Node.js和NPM才能安装依赖项。
根据您是使用deps.cljs
文件配置ClojureScript项目,还是使用build.clj
文件,您将需要通过以下方式之一添加npm
依赖项:
deps.cljs
您需要向依赖关系映射中添加另一个键:{ ;;.. :npm-deps {"react" "15.4.2" "object-assign" "4.1.1"} ;; ... }
那么你应该能够像这样使用依赖关系react
:
(ns example.core
(:require [react :refer [createElement]]))
(js/console.log (createElement "div" nil "Hello World!"))
build.clj
文件,那么您的文件将如下所示:(需要'cljs.build.api :as b)
(b/build "src“{:output-dir "out”:output-to "out/main.js“:优化:无:main 'example.core :install-deps true :npm-deps {:react "15.6.1”:react-dom "15.6.1"}})
并且您以相同的方式使用依赖关系:
(ns example.core
(:require [react :refer [createElement]]
["react-dom/server" :as ReactDOMServer :refer [renderToString]]))
(js/console.log (renderToString (createElement "div" nil "Hello World!")))
如果您需要进一步的解释,我建议您看看using JS modules in ClojureScript in general、the Enhanced Node.js Modules Support、一篇关于integrating Node modules的文章,以及一篇类似于excerpt from previous posts的简明文章。
发布于 2020-02-09 13:35:13
使用在技术上或管理上与您的程序不兼容的库的一种通用技术是让它作为单独的程序运行(在您的Clojure应用程序之外)并以某种方式调用它。
如果它与您的程序流耦合不太紧密,您可以使用Runtime.exec代替函数调用。还有clojure.java.sh/sh。
有了更多的努力,您可以将库打包为web服务,以避免每次调用的启动成本(并获得将其放在单独机器上的灵活性)。
https://stackoverflow.com/questions/60095836
复制