Error with :npm-deps compiler option on windows

159 views
Skip to first unread message

marcs....@gmail.com

unread,
Apr 21, 2017, 11:59:58 AM4/21/17
to ClojureScript
I'm trying to use the new feature for using node packages on cljs on Windows 10.

I'm doing a test using the mies template and cljs version 1.9.521

my project.clj file (using cljs source from master):

```clojure
(defproject npmtest "0.1.0-SNAPSHOT"
:description "FIXME: write this!"
:url "http://example.com/FIXME"
;:dependencies [[org.clojure/clojure "1.8.0"]
;[org.clojure/clojurescript "1.9.521"]]
:dependencies [[org.clojure/clojure "1.8.0"]
[org.clojure/data.json "0.2.6"]
[org.clojure/tools.reader "1.0.0-beta3"]
[org.clojure/test.check "0.9.0" :scope "test"]
[com.cognitect/transit-clj "0.8.285"]
[org.clojure/google-closure-library "0.0-20160609-f42b4a24"]
[com.google.javascript/closure-compiler-unshaded "v20170409"]
[org.mozilla/rhino "1.7R5"]]
:jvm-opts ^:replace ["-Xmx1g" "-server"]
:plugins [[lein-npm "0.6.1"]]
:npm {:dependencies [[source-map-support "0.4.0"]
[left-pad "1.1.3"]]}
:source-paths ["src" "target/classes" "clojurescript/src/main/cljs" "clojurescript/src/main/clojure" "clojurescript/target/classes"]
:clean-targets ["out" "release"]
:target-path "target")
```

This is how I modified my build.clj file:

```clojure
(require '[cljs.build.api :as b])

(println "Building ...")

(let [start (System/nanoTime)]
(b/build "src"
{:main 'npmtest.core
:target :nodejs
:npm-deps {:left-pad "1.1.3"}
:output-to "out/npmtest.js"
:output-dir "out"
:verbose true})
(println "... done. Elapsed" (/ (- (System/nanoTime) start) 1e9) "seconds"))
```

This is my core.cljs file:

```clojure
(ns npmtest.core
(:require [cljs.nodejs :as nodejs] left-pad))

(nodejs/enable-util-print!)

(println "Hello world!")
```

This is the error calling scripts\build.bat that I've tried to fix (fix below the error):

```
Building ...
Installing Node.js dependencies
Exception in thread "main" java.io.IOException: Cannot run program "npm": CreateProcess error=2, Impossibile trovare il file specificato, compiling:(C
\DevLab\projects\npmtest\scripts\build.clj:5:1)
at clojure.lang.Compiler.load(Compiler.java:7391)
at clojure.lang.Compiler.loadFile(Compiler.java:7317)
at clojure.main$load_script.invokeStatic(main.clj:275)
at clojure.main$script_opt.invokeStatic(main.clj:335)
at clojure.main$script_opt.invoke(main.clj:330)
at clojure.main$main.invokeStatic(main.clj:421)
at clojure.main$main.doInvoke(main.clj:384)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.lang.Var.invoke(Var.java:379)
at clojure.lang.AFn.applyToHelper(AFn.java:154)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93)
at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:207)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93)
at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:207)
at user$eval5.invokeStatic(form-init3240817758129116134.clj:1)
at user$eval5.invoke(form-init3240817758129116134.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6927)
at clojure.lang.Compiler.eval(Compiler.java:6917)
at clojure.lang.Compiler.load(Compiler.java:7379)
at clojure.lang.Compiler.loadFile(Compiler.java:7317)
at clojure.main$load_script.invokeStatic(main.clj:275)
at clojure.main$init_opt.invokeStatic(main.clj:277)
at clojure.main$init_opt.invoke(main.clj:277)
at clojure.main$initialize.invokeStatic(main.clj:308)
at clojure.main$null_opt.invokeStatic(main.clj:342)
at clojure.main$null_opt.invoke(main.clj:339)
at clojure.main$main.invokeStatic(main.clj:421)
at clojure.main$main.doInvoke(main.clj:384)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:383)
at clojure.lang.AFn.applyToHelper(AFn.java:156)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)
Caused by: java.io.IOException: Cannot run program "npm": CreateProcess error=2, Impossibile trovare il file specificato
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at cljs.closure$maybe_install_node_deps_BANG_.invokeStatic(closure.clj:2034)
at cljs.closure$maybe_install_node_deps_BANG_.invoke(closure.clj:2027)
at cljs.closure$build.invokeStatic(closure.clj:2226)
at cljs.closure$build.invoke(closure.clj:2213)
at cljs.build.api$build.invokeStatic(api.clj:202)
at cljs.build.api$build.invoke(api.clj:189)
at cljs.build.api$build.invokeStatic(api.clj:192)
at cljs.build.api$build.invoke(api.clj:189)
at user$eval6481.invokeStatic(build.clj:6)
at user$eval6481.invoke(build.clj:5)
at clojure.lang.Compiler.eval(Compiler.java:6927)
at clojure.lang.Compiler.load(Compiler.java:7379)
... 42 more
Caused by: java.io.IOException: CreateProcess error=2, Impossibile trovare il file specificato
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:386)
at java.lang.ProcessImpl.start(ProcessImpl.java:137)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 54 more
```

"Impossibile trovare il file specificato" is italian, means file not found probably because on windows "npm" is "npm.cmd".

On cljs.clojure (https://github.com/clojure/clojurescript/blob/master/src/main/clojure/cljs/closure.clj) line 2035, I changed "npm" to "npm.cmd".

And I ran into a second problem, this is the error (seems like a path resolving problem?) :

```
Building ...
Installing Node.js dependencies
events.js:160
throw er; // Unhandled 'error' event
^

Error: Cannot find module 'C:\DevLab\projects\npmtest\DevLabprojects
pmtestoutcljs$node_modules.js' from 'C:\DevLab\projects\npmtest'
at C:\DevLab\projects\npmtest\node_modules\resolve\lib\async.js:61:35
at load (C:\DevLab\projects\npmtest\node_modules\resolve\lib\async.js:80:43)
at onex (C:\DevLab\projects\npmtest\node_modules\resolve\lib\async.js:105:17)
at C:\DevLab\projects\npmtest\node_modules\resolve\lib\async.js:26:73
at FSReqWrap.oncomplete (fs.js:123:15)

Analyzing file:/C:/DevLab/projects/npmtest/clojurescript/src/main/cljs/cljs/core.cljs
Compiling src\npmtest\core.cljs
Analyzing file:/C:/DevLab/projects/npmtest/clojurescript/src/main/cljs/clojure/browser/repl.cljs
Analyzing file:/C:/DevLab/projects/npmtest/clojurescript/src/main/cljs/clojure/browser/net.cljs
Analyzing file:/C:/DevLab/projects/npmtest/clojurescript/src/main/cljs/clojure/browser/event.cljs
Analyzing file:/C:/DevLab/projects/npmtest/clojurescript/src/main/cljs/cljs/repl.cljs
Analyzing file:/C:/DevLab/projects/npmtest/clojurescript/src/main/cljs/cljs/spec.cljs
Analyzing file:/C:/DevLab/projects/npmtest/clojurescript/src/main/cljs/clojure/walk.cljs
Analyzing file:/C:/DevLab/projects/npmtest/clojurescript/src/main/cljs/cljs/spec/impl/gen.cljs
Analyzing file:/C:/DevLab/projects/npmtest/clojurescript/src/main/cljs/clojure/string.cljs
Exception in thread "main" clojure.lang.ExceptionInfo: failed compiling file:src\npmtest\core.cljs {:file #object[java.io.File 0x1a7f2d34 "src\\npmtest
\\core.cljs"]}, compiling:(C:\DevLab\projects\npmtest\scripts\build.clj:5:1)
at clojure.lang.Compiler.load(Compiler.java:7391)
at clojure.lang.Compiler.loadFile(Compiler.java:7317)
at clojure.main$load_script.invokeStatic(main.clj:275)
at clojure.main$script_opt.invokeStatic(main.clj:335)
at clojure.main$script_opt.invoke(main.clj:330)
at clojure.main$main.invokeStatic(main.clj:421)
at clojure.main$main.doInvoke(main.clj:384)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.lang.Var.invoke(Var.java:379)
at clojure.lang.AFn.applyToHelper(AFn.java:154)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93)
at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:207)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93)
at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:207)
at user$eval5.invokeStatic(form-init7915992400020498856.clj:1)
at user$eval5.invoke(form-init7915992400020498856.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6927)
at clojure.lang.Compiler.eval(Compiler.java:6917)
at clojure.lang.Compiler.load(Compiler.java:7379)
at clojure.lang.Compiler.loadFile(Compiler.java:7317)
at clojure.main$load_script.invokeStatic(main.clj:275)
at clojure.main$init_opt.invokeStatic(main.clj:277)
at clojure.main$init_opt.invoke(main.clj:277)
at clojure.main$initialize.invokeStatic(main.clj:308)
at clojure.main$null_opt.invokeStatic(main.clj:342)
at clojure.main$null_opt.invoke(main.clj:339)
at clojure.main$main.invokeStatic(main.clj:421)
at clojure.main$main.doInvoke(main.clj:384)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:383)
at clojure.lang.AFn.applyToHelper(AFn.java:156)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)
Caused by: clojure.lang.ExceptionInfo: failed compiling file:src\npmtest\core.cljs {:file #object[java.io.File 0x1a7f2d34 "src\\npmtest\\core.cljs"]}
at clojure.core$ex_info.invokeStatic(core.clj:4617)
at clojure.core$ex_info.invoke(core.clj:4617)
at cljs.compiler$compile_file$fn__3865.invoke(compiler.cljc:1443)
at cljs.compiler$compile_file.invokeStatic(compiler.cljc:1408)
at cljs.compiler$compile_file.invoke(compiler.cljc:1384)
at cljs.closure$compile_file.invokeStatic(closure.clj:488)
at cljs.closure$compile_file.invoke(closure.clj:479)
at cljs.closure$eval5655$fn__5656.invoke(closure.clj:557)
at cljs.closure$eval5591$fn__5592$G__5580__5599.invoke(closure.clj:441)
at cljs.closure$compile_sources$iter__5791__5795$fn__5796.invoke(closure.clj:905)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.Cons.next(Cons.java:39)
at clojure.lang.RT.next(RT.java:688)
at clojure.core$next__4341.invokeStatic(core.clj:64)
at clojure.core$dorun.invokeStatic(core.clj:3033)
at clojure.core$doall.invokeStatic(core.clj:3039)
at clojure.core$doall.invoke(core.clj:3039)
at cljs.closure$compile_sources.invokeStatic(closure.clj:899)
at cljs.closure$compile_sources.invoke(closure.clj:888)
at cljs.closure$build.invokeStatic(closure.clj:2281)
at cljs.closure$build.invoke(closure.clj:2213)
at cljs.build.api$build.invokeStatic(api.clj:202)
at cljs.build.api$build.invoke(api.clj:189)
at cljs.build.api$build.invokeStatic(api.clj:192)
at cljs.build.api$build.invoke(api.clj:189)
at user$eval6481.invokeStatic(build.clj:6)
at user$eval6481.invoke(build.clj:5)
at clojure.lang.Compiler.eval(Compiler.java:6927)
at clojure.lang.Compiler.load(Compiler.java:7379)
... 42 more
Caused by: clojure.lang.ExceptionInfo: No such namespace: left-pad, could not locate left_pad.cljs, left_pad.cljc, or Closure namespace "left-pad" in f
ile src\npmtest\core.cljs {:tag :cljs/analysis-error}
at clojure.core$ex_info.invokeStatic(core.clj:4617)
at clojure.core$ex_info.invoke(core.clj:4617)
at cljs.analyzer$error.invokeStatic(analyzer.cljc:645)
at cljs.analyzer$error.invoke(analyzer.cljc:641)
at cljs.analyzer$error.invokeStatic(analyzer.cljc:643)
at cljs.analyzer$error.invoke(analyzer.cljc:641)
at cljs.analyzer$analyze_deps.invokeStatic(analyzer.cljc:1894)
at cljs.analyzer$analyze_deps.invoke(analyzer.cljc:1870)
at cljs.analyzer$ns_side_effects.invokeStatic(analyzer.cljc:3132)
at cljs.analyzer$ns_side_effects.invoke(analyzer.cljc:3127)
at cljs.analyzer$analyze_STAR_$fn__2775.invoke(analyzer.cljc:3224)
at clojure.lang.PersistentVector.reduce(PersistentVector.java:341)
at clojure.core$reduce.invokeStatic(core.clj:6544)
at clojure.core$reduce.invoke(core.clj:6527)
at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:3224)
at cljs.analyzer$analyze_STAR_.invoke(analyzer.cljc:3214)
at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3242)
at cljs.analyzer$analyze.invoke(analyzer.cljc:3226)
at cljs.compiler$emit_source.invokeStatic(compiler.cljc:1279)
at cljs.compiler$emit_source.invoke(compiler.cljc:1259)
at cljs.compiler$compile_file_STAR_$fn__3842.invoke(compiler.cljc:1353)
at cljs.compiler$with_core_cljs.invokeStatic(compiler.cljc:1178)
at cljs.compiler$with_core_cljs.invoke(compiler.cljc:1167)
at cljs.compiler$compile_file_STAR_.invokeStatic(compiler.cljc:1342)
at cljs.compiler$compile_file_STAR_.invoke(compiler.cljc:1335)
at cljs.compiler$compile_file$fn__3865.invoke(compiler.cljc:1431)
... 69 more
```
Reply all
Reply to author
Forward
0 new messages