大家好,我在使用版本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}}到编译器选项后错误依旧存在。