如何使用blojurescript的bignumber.js:npm-deps功能

时间:2017-07-10 03:51:51

标签: clojurescript

我一直在关注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"]

1 个答案:

答案 0 :(得分:2)

使用[org.clojure/clojurescript "1.9.562"]

时,这适用于ClojureScript REPL
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"]直到有一个包含此补丁的新版本。