大家好,我在版本 1.10.439 的 {{require}} 外部库时遇到错误。
我的项目根据
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}} 到编译器选项后,错误仍然存在。