嗨,各位,我在使用 1.10.439 版本时在导入外部库时遇到错误。
我的项目根据
https://script.clojure.org/guides/javascript-modules, 安装,但没有使用 leiningen。
所以,有 deps.edn,{{\{:deps {org.clojure/clojurescript \{:mvn/version "1.9.908"\}\}\}}}
{code:title=watch.clj}
(require '[cljs.build.api :as b])
(b/watch "src"
{:output-to "main.js"
:output-dir "out"
:main 'hello-es6.core
:target :nodejs
:foreign-libs [{:file "src"
:module-type :es6}] ;; 或 :commonjs / :amd
:verbose true})
然后我已经根据说明将这些 cljs 和 js 文件复制过来
src/
├── hello_es6
│ └── core.cljs
└── js
└── hello.js
然后我可以执行 {{clj ./watch.clj}} (使用 clojure 1.9) 并正常工作,{{node main.js}} 打印出预期的消息。但如果我仅仅是将 deps.edn 更改为 {{\{:deps \{org.clojure/clojurescript \{:mvn/version "1.10.439"\}\}\}},它就会中断。首先,出现关于 clj-oss/module-deps 的错误,好吧,我本想使用 npm,所以我安装了它,然后在进行了一次清缓存和重新编译后,出现了以下错误:
$ node main.js
/Users/jb/src/hello-es6/out/hello_es6/core.js:28
return module$Users$jb$src$hello_es6$src$js$hello.sayHello();
^
TypeError: module$Users$jb$src$hello_es6$src$js$hello.sayHello is not a function
at Function.cljs$core$IFn$_invoke$arity$variadic (/Users/jb/src/hello-es6/out/hello_es6/core.js:28:51)
at hello_es6$core$_main (/Users/jb/src/hello-es6/out/hello_es6/core.js:24:29)
at Object.cljs$core$apply_to [as apply_to] (/Users/jb/src/hello-es6/out/cljs/core.js:12956:81)
at Function.cljs$core$IFn$_invoke$arity$2 (/Users/jb/src/hello-es6/out/cljs/core.js:13400:18)
at cljs$core$apply (/Users/jb/src/hello-es6/out/cljs/core.js:13358:24)
at Object.<anonymous> (/Users/jb/src/hello-es6/out/AEF573C.js:10:17)
at Module._compile (internal/modules/cjs/loader.js:722:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:733:10)
at Module.load (internal/modules/cjs/loader.js:620:32)
at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
添加 {{:npm-deps true}} 到编译器选项后,错误依然存在。