请在2024 Clojure 状态调查!分享您的想法。

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

0
ClojureScript

这是与https://dev.clojure.org/jira/browse/CLJS-1682相同的问题,因此所有重现错误的说明都可以在相关问题上找到。

以下是不同 cljs 版本上的不同错误的具体细节

使用 cljs==1.9.845 时,两种情况下编译都成功终止(在 build.clj 中的 :foreign-libs 和在 deps.cljs 中),但在执行生成的 JavaScript 时抛出异常

`
$ node out/main.js
out/src/vendor/greeter.js:3
exports.sayHello = function(name) {

             ^

TypeError: Cannot set property 'sayHello' of undefined

at out/src/vendor/greeter.js:3:18
at ContextifyScript.Script.runInThisContext (vm.js:50:33)
at Object.runInThisContext (vm.js:139:38)
at Object.nodeGlobalRequire (/home/niwi/tmp/greeter/out/goog/bootstrap/nodejs.js:85:8)
at Object.cljs$core$load_file [as load_file] (/home/niwi/tmp/greeter/out/cljs/core.js:341:13)
at Object.<anonymous> (/home/niwi/tmp/greeter/out/testapp/core.js:5:11)
at Module._compile (module.js:624:30)
at Object.Module._extensions..js (module.js:635:10)
at Module.load (module.js:545:32)
at tryModuleLoad (module.js:508:12)

`

使用 cljs==1.9.908 时,两种情况下编译都成功终止但在执行生成的 JavaScript 时抛出其他异常

`
$ node out/main.js
/home/niwi/tmp/greeter/out/testapp/core.js:28
return cljs.core.println.call(null,module$src$vendor$greeter.sayHello("Ciri"));

                                                         ^

TypeError: module$src$vendor$greeter.sayHello is not a function

at Function.testapp.core._main.cljs$core$IFn$_invoke$arity$variadic (/home/niwi/tmp/greeter/out/testapp/core.js:28:62)
at testapp$core$_main (/home/niwi/tmp/greeter/out/testapp/core.js:24:27)
at Object.cljs$core$apply_to [as apply_to] (/home/niwi/tmp/greeter/out/cljs/core.js:12793:81)
at Function.cljs.core.apply.cljs$core$IFn$_invoke$arity$2 (/home/niwi/tmp/greeter/out/cljs/core.js:13237:18)
at cljs$core$apply (/home/niwi/tmp/greeter/out/cljs/core.js:13195:24)
at Object.<anonymous> (/home/niwi/tmp/greeter/out/DF0FC10.js:9:17)
at Module._compile (module.js:624:30)
at Object.Module._extensions..js (module.js:635:10)
at Module.load (module.js:545:32)
at tryModuleLoad (module.js:508:12)

`

并且使用 cljs==1.9.946,在 build.clj 文件中使用 :foreign-libs,以下错误会被抛出

`
$ java -cp cljs.jar:src clojure.main build.clj
module.js:529

throw err;
^

Error: Cannot find module '@cljs-oss/module-deps'

at Function.Module._resolveFilename (module.js:527:15)
at Function.Module._load (module.js:476:23)
at Module.require (module.js:568:17)
at require (internal/module.js:11:18)
at [eval]:3:13
at ContextifyScript.Script.runInThisContext (vm.js:50:33)
at Object.runInThisContext (vm.js:139:38)
at Object.<anonymous> ([eval]-wrapper:6:22)
at Module._compile (module.js:624:30)
at evalScript (bootstrap_node.js:462:27)

正在复制文件:/home/niwi/tmp/greeter/src/vendor/greeter.js 到 out/src/vendor/greeter.js
正在复制:jar:file:/home/niwi/tmp/greeter/cljs.jar!/cljs/core.cljs 到 out/cljs/core.cljs
正在读取 jar:file:/home/niwi/tmp/greeter/cljs.jar!/cljs/core.cljs 的分析缓存
编译 out/cljs/core.cljs
[...]
`

不管错误是什么,编译继续并终止,生成的 JavaScript 抛出以下错误(与 cljs==1.9.908 中的错误非常相似)

`
$ node out/main.js
/home/niwi/tmp/greeter/out/testapp/core.js:28
return cljs.core.println.call(null,module$home$niwi$$tmp$$greeter$$src$$vendor$$greeter.sayHello("Ciri"));

                                                                               ^

TypeError: module$home$niwi$$tmp$$greeter$$src$$vendor$$greeter.sayHello is not a function

at Function.testapp.core._main.cljs$core$IFn$_invoke$arity$variadic (/home/niwi/tmp/greeter/out/testapp/core.js:28:84)
at testapp$core$_main (/home/niwi/tmp/greeter/out/testapp/core.js:24:27)
at Object.cljs$core$apply_to [as apply_to] (/home/niwi/tmp/greeter/out/cljs/core.js:12785:81)
at Function.cljs.core.apply.cljs$core$IFn$_invoke$arity$2 (/home/niwi/tmp/greeter/out/cljs/core.js:13229:18)
at cljs$core$apply (/home/niwi/tmp/greeter/out/cljs/core.js:13187:24)
at Object.<anonymous> (/home/niwi/tmp/greeter/out/AEF573C.js:10:17)
at Module._compile (module.js:624:30)
at Object.Module._extensions..js (module.js:635:10)
at Module.load (module.js:545:32)
at tryModuleLoad (module.js:508:12)

`

如果在 deps.cljs 文件中设置 :foreign-lib,则编译在无错误的情况下终止,但生成的 JavaScript 会抛出与 cljs==1.9.845 相同的错误。

2 个回答

0

评论由:bobby 制作

我可以确认该问题存在于1.10.339版本中。为了使用:foreign-libs并设置:module-type :es6,我不得不执行npm install --save @cljs-oss/module-deps。我没有设置:npm-deps,所以这看起来是一个不直观的额外步骤。

0
by
参考: https://clojure.atlassian.net/browse/CLJS-2399(由 ale x+import 提出)
...