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
WARNING: foo 是一个段命名空间,行 1 /Users/kommen/work/cljs-issues/graal-build/src/foo.cljs
$ js out/main.js
ReferenceError: 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}} 文件添加到输入中。这在 {{:optimizizations :simple}} 中工作得很好,但在 {{:advanced}} 中不行。我可能可以用 externs 修复它,但首先想讨论一下一般的处理方法。

0
...