ma2s
ma2s

Reputation: 1312

How to use bignumber.js with Clojurescript's :npm-deps feature

I've been following tutorial at https://anmonteiro.com/2017/03/requiring-node-js-modules-from-clojurescript-namespaces/ to use Clojurescript's :npm-deps feature.

Using left-pad works well, but when I tried to use bignumber.js I've hit problems.

This is from my 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"}}

This is code with output:

(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
  )

Any idea why this doesn't work as expected?

Using [org.clojure/clojurescript "1.9.671"] [lein-figwheel "0.5.11"]

Upvotes: 1

Views: 812

Answers (1)

Scott
Scott

Reputation: 17257

This works for me in the ClojureScript REPL when using [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"

I would guess that the behaviour you're seeing could be a bug or breaking change in [org.clojure/clojurescript "1.9.671"].

Update:

This does indeed appear to be a bug that was patched today:

https://github.com/clojure/clojurescript/commit/00df4ae8a49005dbbb3ad87bf1a24e71897d74f7

I would suggest that you downgrade to an older (but recent!) version of ClojureScript e.g. [org.clojure/clojurescript "1.9.562"] until there is a new release which includes this patch.

Upvotes: 2

Related Questions