2024 年 Clojure 调查问卷! 中分享您的想法。

欢迎!请参阅 关于 页面以了解更多有关如何使用本网站的信息。

0
ClojureScript

在 clojurescript 1.10.773 中,我认为在用 webpack 打包项目时无法使用 cljs.js 中的 eval,因为这可能是由于 eval 调用了 find-ns-obj,而在设置为 :bundle:target 时无法正常工作。这很有道理,但是即使在选项映射中传递了 :ns,这种错误仍然会出现。

在使用 cljs.js 中的 eval 以前在 clojurescript 1.10.741 中是可以工作的,即使 :target 设置为 :bundle。这似乎是因为之前的 clojurescript 版本在设置编译器选项时从未设置过 *target*

我遇到的错误是

core.cljs:11642 Uncaught Error: find-ns-obj not supported for target bundle
    at Object.cljs$core$find_ns_obj [as find_ns_obj] (core.cljs:11642)
    at Function.cljs$core$IFn$_invoke$arity$1 (core.cljs:11660)
    at cljs$core$create_ns (core.cljs:11657)
    at Function.cljs$js$compile_str_STAR__$_compile_loop (js.cljs:918)
    at Function.cljs$core$IFn$_invoke$arity$3 (core.cljs:3918)
    at Function.cljs$core$IFn$_invoke$arity$2 (core.cljs:3913)
    at Function.cljs$core$IFn$_invoke$arity$2 (core.cljs:3948)
    at core.cljs:10831
    at Function.cljs$core$IFn$_invoke$arity$1 (core.cljs:10826)
    at Function.cljs$core$IFn$_invoke$arity$variadic (core.cljs:10831)
cljs$core$find_ns_obj @ core.cljs:11642
(anonymous) @ core.cljs:11660
cljs$core$create_ns @ core.cljs:11657
cljs$js$compile_str_STAR__$_compile_loop @ js.cljs:918
(anonymous) @ core.cljs:3918
(anonymous) @ core.cljs:3913
(anonymous) @ core.cljs:3948
(anonymous) @ core.cljs:10831
(anonymous) @ core.cljs:10826
(anonymous) @ core.cljs:10831
cljs$core$trampoline @ core.cljs:10817
cljs$js$compile_str_STAR_ @ js.cljs:910
(anonymous) @ js.cljs:1019
cljs$js$compile_str @ js.cljs:968
interactive_syntax$core$eval_str @ core.cljs:48
run @ core.cljs:351
callCallback @ react-dom.development.js:188
invokeGuardedCallbackDev @ react-dom.development.js:237
invokeGuardedCallback @ react-dom.development.js:292
invokeGuardedCallbackAndCatchFirstError @ react-dom.development.js:306
executeDispatch @ react-dom.development.js:389
executeDispatchesInOrder @ react-dom.development.js:414
executeDispatchesAndRelease @ react-dom.development.js:3278
executeDispatchesAndReleaseTopLevel @ react-dom.development.js:3287
forEachAccumulated @ react-dom.development.js:3259
runEventsInBatch @ react-dom.development.js:3304
runExtractedPluginEventsInBatch @ react-dom.development.js:3514
handleTopLevel @ react-dom.development.js:3558
batchedEventUpdates$1 @ react-dom.development.js:21871
batchedEventUpdates @ react-dom.development.js:795
dispatchEventForLegacyPluginEventSystem @ react-dom.development.js:3568
attemptToDispatchEvent @ react-dom.development.js:4267
dispatchEvent @ react-dom.development.js:4189
unstable_runWithPriority @ scheduler.development.js:653
runWithPriority$1 @ react-dom.development.js:11039
discreteUpdates$1 @ react-dom.development.js:21887
discreteUpdates @ react-dom.development.js:806
dispatchDiscreteEvent @ react-dom.development.js:4168
Show 8 more frames
react-dom.development.js:327 Uncaught Error: find-ns-obj not supported for target bundle
    at Object.cljs$core$find_ns_obj [as find_ns_obj] (core.cljs:11642)
    at Function.cljs$core$IFn$_invoke$arity$1 (core.cljs:11660)
    at cljs$core$create_ns (core.cljs:11657)
    at Function.cljs$js$compile_str_STAR__$_compile_loop (js.cljs:918)
    at Function.cljs$core$IFn$_invoke$arity$3 (core.cljs:3918)
    at Function.cljs$core$IFn$_invoke$arity$2 (core.cljs:3913)
    at Function.cljs$core$IFn$_invoke$arity$2 (core.cljs:3948)
    at core.cljs:10831
    at Function.cljs$core$IFn$_invoke$arity$1 (core.cljs:10826)
    at Function.cljs$core$IFn$_invoke$arity$variadic (core.cljs:10831)

任何使用 evaleval-strcompile-str 等。都给我这个错误。比如

(eval-str (empty-state) "(+ 1 2)" "UNTITLED" {:eval js-eval} println)

即使我提供了自己的 :ns,我也会得到这个错误。

2 个答案

+1

我还会说,你可能通过添加 https://github.com/borkdude/sci 而不是使用 ClojureScript 的 eval 来获得更多成功的机会。

不幸的是,SCI 没有类似于 cljs.js 中的 `compile-str` 的功能(至少在 api 文档中没有),因此似乎不可能将编译结果传递给类似于 Stopify(《https://www.stopify.org/》)的东西来 '暂停' 正在运行的程序。

除非我能暂停/恢复 SCI 运行的代码,或者至少能够在不会完全锁定 GUI 的情况下运行可能无限循环的代码,否则这几乎是不可能的。
0

self-hosted//bootstrapped cljs 是一项艰难的技巧

您可能无法使用 advanced 编译,并启用/禁用其他一些构建标志。

https://blog.klipse.tech/clojurescript/2016/04/04/self-host-part-1.html

https://code.thheller.com/blog/shadow-cljs/2017/10/14/bootstrap-support.html

另外,检查 clojurians.net 和 #shadow-cljs 通道。
...