如何将 bignumber.js 与 Clojurescript 的 :npm-deps 功能一起使用
How to use bignumber.js with Clojurescript's :npm-deps feature
我一直在按照 https://anmonteiro.com/2017/03/requiring-node-js-modules-from-clojurescript-namespaces/ 上的教程使用 Clojurescript 的 :npm-deps 功能。
使用 left-pad 效果很好,但是当我尝试使用 bignumber.js 我遇到了问题。
这是我的 project.clj
{: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"]
[lein-figwheel "0.5.11"]
当我使用 [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"]
中的错误或重大更改。
更新:
这确实是一个今天已修复的错误:
https://github.com/clojure/clojurescript/commit/00df4ae8a49005dbbb3ad87bf1a24e71897d74f7
我建议您降级到较旧(但最新!)的 ClojureScript 版本,例如[org.clojure/clojurescript "1.9.562"]
直到发布包含此补丁的新版本。
我一直在按照 https://anmonteiro.com/2017/03/requiring-node-js-modules-from-clojurescript-namespaces/ 上的教程使用 Clojurescript 的 :npm-deps 功能。
使用 left-pad 效果很好,但是当我尝试使用 bignumber.js 我遇到了问题。
这是我的 project.clj
{: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"]
[lein-figwheel "0.5.11"]
当我使用 [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"]
中的错误或重大更改。
更新:
这确实是一个今天已修复的错误:
https://github.com/clojure/clojurescript/commit/00df4ae8a49005dbbb3ad87bf1a24e71897d74f7
我建议您降级到较旧(但最新!)的 ClojureScript 版本,例如[org.clojure/clojurescript "1.9.562"]
直到发布包含此补丁的新版本。