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

欢迎!有关本站如何工作的更多信息,请参阅 关于 页面。

0
ClojureScript
{{[cljs/bootstrap_graaljs.js|https://github.com/clojure/clojurescript/blob/bc6ecdd6e53ccff42315ed747e34ace465def986/src/main/cljs/cljs/bootstrap_graaljs.js]}} 文件提供了一些基本函数,如 {{setTimeout}},这是库在 JS 环境中默认提供的以进行工作的。

对于 GraalJS repl 环境,这已提供: https://github.com/clojure/clojurescript/blob/bc6ecdd6e53ccff42315ed747e34ace465def986/src/main/clojure/cljs/repl/graaljs.clj#L64

然而,对于优化构建,该文件没有包含,并且缺失了这些函数

{{src/foo.cljs}}

(ns foo
  (:require [clojure.core.async :as async]))
(async/timeout 1000)



$ clj -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "1.10.520"} org.clojure/core.async  {:mvn/version "0.4.474"}}}' -m cljs.main -O simple -t graaljs -c foo
警告:foo 是位于行 1 的单个段空间名空间 /Users/kommen/work/cljs-issues/graal-build/src/foo.cljs
$ js out/main.js
引用错误:setTimeout 未定义
    在 <js> queue_delay(out/main.js:2201:905961-905970)
    在 <js> timeout(out/main.js:2298-2299:948503-948718)
    在 <js> timeout(out/main.js:2311:954258-954305)
    在 <js> :program(out/main.js:2569:1074102-1074139)

$ js --version
GraalVM JavaScript (GraalVM CE Native 19.0.0)

2 个答案

0

评论者:kommen

https://clojure.atlassian.net/secure/attachment/18669/CLJS-3113.patch 将是我最初的方法:它会将 {{bootstrap_graaljs.js}} 文件添加到输入中。这对于 {{:optimiziations :simple}} 是有效的,但不适用于 {{:advanced}}。这可能会通过 externs 进行修复,但首先想讨论一下一般方法。

0
by
参考: https://clojure.atlassian.net/browse/CLJS-3113 (由 kommen 报告)
...