Как использовать node.js библиотеки и API с clojure ring? - PullRequest
0 голосов
/ 06 февраля 2020

Предположим, есть API, который я хочу использовать, который доступен в Node.js, но не для clojure ring. Есть ли способ, которым я могу использовать его в кольце clojure?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2020

Один общий метод использования библиотеки, которая технологически или административно несовместима с вашей программой, - это позволить ей работать как отдельная программа (вне приложения Clojure) и вызывать ее каким-либо образом.

Если это не слишком тесно связано с потоком вашей программы, вы можете использовать Runtime.exe c вместо вызова функции. Также есть clojure. java .sh / sh.

С большим усилием вы можете упаковать библиотеку в качестве веб-службы, чтобы избежать начальных затрат на вызов (и получить гибкость, чтобы поставить его на отдельную машину).

0 голосов
/ 08 февраля 2020

Если вы хотите использовать npm модули напрямую, лучше всего использовать ClojureScript. ClojureScript - это библиотека Clojure, которая компилирует код Clojure в JavaScript. Это обеспечивает бесшовную интеграцию с Node.js. Само собой разумеется, что вам нужно будет установить оба Node.js и NPM, чтобы можно было устанавливать зависимости.

В зависимости от того, используете ли вы файл deps.cljs для настройки вашего проекта ClojureScript или используя файл build.clj, вам нужно будет добавить зависимости npm одним из следующих способов:

  1. 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 ваш файл будет выглядеть примерно так:

(требуется '[cl js .build.api: as b])

(b / build "sr c" {: output-dir "out": output-to "out / main. js": оптимизации: нет: основной 'example.core: install-deps true: npm -deps {: реагировать "15.6.1": реакция-дом "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!")))

Если вам требуются дополнительные пояснения, я рекомендую вам взглянуть на с использованием JS модулей в ClojureScript в целом , Расширенная Node.js Поддержка модулей , статья о интеграции модулей Node и краткой статье, которая является своего рода выдержкой из предыдущих постов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...