假设我有一个cljs包含以下内容的文件:
(ns foo)
(defn add [x y]
(+ x y))
Run Code Online (Sandbox Code Playgroud)
并希望将其作为JavaScript库提供给非ClojureScript开发人员(主要侧重于node.js)。我可以做这个:
clj -m cljs.main -c foo
Run Code Online (Sandbox Code Playgroud)
但是问题在于输出是针对Google闭包的模块系统(例如goog.require)的。我可以将目标设置为none带有-t标志(而不是浏览器或节点),并且...无法解决此问题。将其设置为node还不能解决问题:否index.js(在Java中称为main),no module.exports = blah blah。似乎它面向的是独立的全节点应用程序,而不是库。
我知道ClojureScript使用google闭包作为其自身的子模块,并且我不一定要摆脱所有这些问题(我不确定您可以这样做)。而且我知道es2015本机JavaScript模块由于其静态特性而退出市场。
我可以手动或通过脚本对输出进行按摩,以使其与npm生态系统完美配合,但是令我惊讶的是,没有编译器选项可以实际输出npm友好模块。还是在那里?我只是读--help错了吗?
Web 开发新手在这里。我正在尝试将 NPM react-table 包与 ClojureScript/Reagent 项目一起使用。我无法正确导入包。我所做的:
1/通过NPM安装react-table,在我的项目目录下
2/在我的主命名空间中,我已经包含了 (:require ["react-table" :as rt])
在 REPL 中,我可以看到它正在建立一些连接,因为只要输入rt就会返回#js {:ReactTableDefaults #js {:data #js [], ...
我怎样才能真正创建一个表?我已经尝试过诸如
rt/ReactTable {:data [{:a 1 :b 2} {:a 3 :b 4} {:a 6 :b 8}] :columns [{:Header "a" :accessor "a"} {:Header "b" :accessor "b"}]} 但我一直在打 TypeError: module$node_modules$react_table$lib$index.ReactTable is not a function
我也读过https://code.thheller.com/blog/shadow-cljs/2017/11/10/js-dependencies-in-practice.html但这对我帮助不大。
更新- 使用 figwheel 我到达了某个地方,这就是我想在 shadow-cljs 中重现的内容:
在 project.clj 中: [cljsjs/react-table "6.8.6-0"]
在“视图”命名空间中: (:require [cljsjs.react-table] [reagent.core :as r])
然后这实际上显示了一个表格:
(def ReactTable …Run Code Online (Sandbox Code Playgroud) clojurescript reactjs clojurescript-javascript-interop shadow-cljs
我正在尝试使用特定的 JavaScript 框架,该框架需要扩展基类以将其用于应用程序。
基本上我想按照惯用的 ClojureScript 执行以下操作。
class Foo extends Bar {
constructor() { super("data") }
method1(args) { /* do stuff */ }
}
Run Code Online (Sandbox Code Playgroud)
我试过
(defn foo
[]
(reify
js/Bar
(constructor [this] (super this "data"))
(method1 [this args] )))
Run Code Online (Sandbox Code Playgroud)
如果我从 Object 创建一个新类,这会起作用,但正如shadow-cljs正确抱怨的那样,“Symbol js/Bar 不是协议”。另外,我不想添加方法,而是创建一个继承某些方法并重载其他方法的子类。
我想过使用proxy,但“未定义核心/代理”。
当然,我可以创建的实例Bar和set!新方法,但感觉就像放弃和使用质量较低的语言。