如何在ClojureScript中创建不可知的JavaScript库?

问题描述 投票:3回答:1

假设我有一个包含以下内容的cljs文件:

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

并希望将其作为JavaScript库提供给非ClojureScript开发人员(主要关注node.js)。我可以做这个:

clj -m cljs.main -c foo

但问题是输出是针对谷歌闭包的模块系统(例如goog.require)。我可以使用none标志(而不是浏览器或节点)将目标设置为-t,并且......并不能解决这个问题。将它设置为node也无法解决问题:没有index.js(它在Java中称为main),没有module.exports = blah blah。似乎它适用于独立的完整节点应用程序,而不是库。

我知道ClojureScript使用谷歌封闭它自己的子模块,我不一定要摆脱所有这些(我不确定你能不能)。我得到es2015本机JavaScript模块因为它们的静态特性而被淘汰。

我可以通过手工或脚本来按下输出,以便与npm生态系统一起玩,但我很惊讶没有可以实际输出npm友好模块的编译器选项。还是有吗?我只是读--help错了吗?

clojurescript clojurescript-javascript-interop
1个回答
2
投票

shadow-cljs通过:target :npm-module支持CommonJS格式的输出,qzxswpoi确实支持您的要求。节点和其他JS工具(例如,webpack)可以独立地使用单独的命名空间。默认CLJS工具不支持此模式。

然而,ClojureScript的编写非常假设您的整个程序将由Closure Compiler优化。这使得它不太适合编写要包含在其他构建中的库。以这种方式构建的每个“库”将包含其自己的cljs.core版本,因此将开始相当大,并且包括以这种方式构建的2个库是灾难的配方,因为它们将彼此不兼容。

© www.soinside.com 2019 - 2024. All rights reserved.