大家好,在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}}到编译器选项后错误仍然存在。