Как создать независимую библиотеку JavaScript в ClojureScript? - PullRequest
0 голосов
/ 19 октября 2018

Допустим, у меня есть файл cljs, содержащий следующее:

(ns foo)
(defn add [x y]
  (+ x y))

, и я хочу сделать его доступным в виде библиотеки JavaScript для разработчиков, не являющихся ClojureScript (в первую очередь ориентированных на node.js).Я могу сделать это:

clj -m cljs.main -c foo

Но проблема в том, что вывод ориентирован на систему модулей Google Closure (например, goog.require).Я могу установить цель на none с флагом -t (в отличие от браузера или узла), и это ... не исправляет это.Установка node также не решает проблему: нет index.js (это называется main как в Java), нет module.exports = blah blah.Похоже, что он предназначен для автономных приложений с полным узлом, а не для библиотек.

Я понимаю, что ClojureScript использует закрытие Google для своих собственных подмодулей, и я не обязательно ищуизбавиться от всего этого (я не уверен, что вы могли бы ).И я получаю, что собственные модули JavaScript es2015 отсутствуют из-за их статической природы.

I может массировать вывод вручную или с помощью скрипта, чтобы играть хорошо с экосистемой npm, но яУдивило, что нет опции компилятора, которая может выводить дружественный к npm модуль.Или есть?Я просто читаю --help неправильно?

1 Ответ

0 голосов
/ 19 октября 2018

shadow-cljs поддерживает вывод в формате CommonJS через : target: npm-module , который поддерживает именно то, что вы запрашиваете.Node и другие инструменты JS (например, webpack) могут независимо использовать отдельные пространства имен.Инструменты CLJS по умолчанию не поддерживают этот режим.

ClojureScript, тем не менее, написан очень часто с предположением, что вся ваша программа будет оптимизирована с помощью Closure Compiler.Это делает его менее чем идеальным для написания библиотек для включения в другие сборки.Каждая «библиотека», построенная таким образом, будет содержать свою собственную версию cljs.core и, следовательно, будет довольно большой для начала, а включение 2 библиотек, построенных таким образом, является рецептом катастрофы, поскольку они не будут совместимы друг с другом.

...