大家好,我在使用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 不是函数
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}} 到编译器选项后,错误仍然存在。