在<答疑>2024状态 Clojure调查问卷!

欢迎!请参阅<答疑>关于页面了解更多关于这如何工作。

0
ClojureScript

(def x x)

此代码在 JavaScript 中可以正常运行,但没有产生任何有用的结果,我想知道我们是否应该对此进行检查。当运行 {{:advanced}} 编译时,它将因加密错误消息而失败,例如

`
主线程异常 java.lang.IllegalStateException: ASSIGN 5 [length: 23] [source_file: .../test/foo.js] 不是 GETPROP 5 [length: 10] [source_file: .../test/foo.js] 的父级

    at com.google.common.base.Preconditions.checkState(Preconditions.java:733)
    at com.google.javascript.rhino.Node.replaceChild(Node.java:900)
    at com.google.javascript.jscomp.AggressiveInlineAliases.inlineGlobalAliasIfPossible(AggressiveInlineAliases.java:557)
    at com.google.javascript.jscomp.AggressiveInlineAliases.inlineAliases(AggressiveInlineAliases.java:180)
    at com.google.javascript.jscomp.AggressiveInlineAliases.process(AggressiveInlineAliases.java:123)
    at com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process(PhaseOptimizer.java:303)
    at com.google.javascript.jscomp.PhaseOptimizer.process(PhaseOptimizer.java:230)
    at com.google.javascript.jscomp.Compiler.performOptimizations(Compiler.java:2480)
    at com.google.javascript.jscomp.Compiler$3.call(Compiler.java:808)
    at com.google.javascript.jscomp.Compiler$3.call(Compiler.java:804)
    at com.google.javascript.jscomp.CompilerExecutor$2.call(CompilerExecutor.java:102)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:844)

`

代码本身就无法使用,并且很可能是由于错误而编写的。这个错误在使用 shadow-cljs 的用户从 CLJSJS 迁移一些代码时出现了几次,CLJSJS 以前曾将某个全局变量拉入本地命名空间。

`
(ns demo.foo
(:require [cljsjs.foo]))

(def foo js/foo)
`

重写为

`
(ns demo.foo
(:require ["that-npm-foo" :as foo]))

(def foo foo)
`

犯的错误是认为 {{def}} 的右侧引用的是 ns 别名 {{foo}},但实际上它引用的是左侧。

1 答案

0
参考: https://clojure.atlassian.net/browse/CLJS-2851(thheller 报告)
...