我一直在关注https://anmonteiro.com/2017/03/requiring-node-js-modules-from-clojurescript-namespaces/的教程,使用Clojurescript的:npm-deps功能。
使用左脚垫效果很好,但当我尝试使用bignumber.js时遇到了问题。
这是来自我的project.clj
poll.pollForCandidates()
.then((candidates) => {
let clientId = candidates[0].clientId;
return poll.getUnprocessedCandidates({context, clientId, candidates})
.then(unprocessedCandidates => poll.addCandidatesToQueue(context, unprocessedCandidates))
.then(poll.addCandidatesToTable)
.then((result) => {
console.log(result);
});
})
.catch((error) => {
console.log(error);
});
这是带输出的代码:
{:main "npm-deps-test.core"
:output-to "dev-compiled/npm-deps-test.js",
:output-dir "dev-compiled",
:target :nodejs,
:optimizations :none,
:source-map true
:npm-deps {:bignumber.js "4.0.2"
:left-pad "1.1.3"}}
知道为什么这不能按预期工作吗?
使用(ns npm-deps-test.core
(:require [left-pad]
[bignumber.js :as bignumber]))
(enable-console-print!)
(comment
(type bignumber)
; => #object[Object "function Object() { [native code] }"]
(aget bignumber "__proto__" "constructor")
; => #object[Object "function Object() { [native code] }"]
(bignumber "123")
; #object[TypeError TypeError: module$Users$matus$www$clojure_hacking$npm_deps_test$node_modules$bignumber_js$bignumber is not a function]
; => nil
(new bignumber "124")
; #object[TypeError TypeError: module$Users$matus$www$clojure_hacking$npm_deps_test$node_modules$bignumber_js$bignumber is not a constructor]
; => nil
(bignumber. "123")
; #object[TypeError TypeError: module$Users$matus$www$clojure_hacking$npm_deps_test$node_modules$bignumber_js$bignumber is not a constructor]
; => nil
(left-pad 42 5 0)
; => 00042
)
[org.clojure/clojurescript "1.9.671"]
答案 0 :(得分:2)
使用[org.clojure/clojurescript "1.9.562"]
user=> (require '[bignumber.js :as BigNumber])
nil
user=> (BigNumber. "123")
#object[BigNumber 123]
user=> (-> (BigNumber. "12345678") (.toExponential))
"1.2345678e+7"
我猜你所看到的行为可能是[org.clojure/clojurescript "1.9.671"]
中的错误或改变。</ p>
这确实是一个今天修补过的错误:
https://github.com/clojure/clojurescript/commit/00df4ae8a49005dbbb3ad87bf1a24e71897d74f7
我建议你降级到ClojureScript的旧版本(但最近的版本!),例如[org.clojure/clojurescript "1.9.562"]
直到有一个包含此补丁的新版本。