假设我有一个包含以下内容的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
错了吗?
shadow-cljs通过:target :npm-module支持CommonJS格式的输出,qzxswpoi确实支持您的要求。节点和其他JS工具(例如,webpack
)可以独立地使用单独的命名空间。默认CLJS工具不支持此模式。
然而,ClojureScript的编写非常假设您的整个程序将由Closure Compiler优化。这使得它不太适合编写要包含在其他构建中的库。以这种方式构建的每个“库”将包含其自己的cljs.core
版本,因此将开始相当大,并且包括以这种方式构建的2个库是灾难的配方,因为它们将彼此不兼容。