问题
I am trying to learn clojure.spec
. While setting up a clojure project along boot build tool I am getting following error while requiring the clojure.spec.alpha.
Compiling ClojureScript...
• js/app.js
No such namespace: clojure.spec.alpha, could not locate clojure/spec/alpha.cljs, clojure/spec/alpha.cljc, or Closure namespace "clojure.spec.alpha" in f
ile src/cljs/flowparser/app.cljs
Elapsed time: 0.141 sec
My Boot Configuration is as follows:
(def +version+ "0.0.1-SNAPSHOT")
(def +description+ "Parses graph DSL for VADE")
(set-env!
:source-paths #{"src/cljs"}
:resource-paths #{"resources"}
:dependencies '[
[org.clojure/clojure "1.9.0-alpha16"]
[org.clojure/clojurescript "1.9.521"]
[org.clojure/core.async "0.3.442"]
[adzerk/boot-cljs "2.0.0" :scope "test"]
[adzerk/boot-cljs-repl "0.3.3" :scope "test"]
[adzerk/boot-reload "0.5.1" :scope "test"]
[pandeiro/boot-http "0.8.0" :scope "test"]
[com.cemerick/piggieback "0.2.1" :scope "test"]
[org.clojure/tools.nrepl "0.2.13" :scope "test"]
[weasel "0.7.0" :scope "test"]
[crisptrutski/boot-cljs-test "0.3.0" :scope "test"]
[binaryage/dirac "1.2.7" :scope "test"]
[powerlaces/boot-cljs-devtools "0.2.0" :scope "test"]
[proto-repl "0.3.1" :scope "test"]
[proto-repl-charts "0.3.2" :scope "test"]
[boot-codox "0.10.3" :scope "test"]
[adzerk/bootlaces "0.1.13"]])
(require
'[adzerk.boot-cljs :refer [cljs]]
'[adzerk.boot-cljs-repl :refer [cljs-repl start-repl]]
'[adzerk.boot-reload :refer [reload]]
'[pandeiro.boot-http :refer [serve]]
'[crisptrutski.boot-cljs-test :refer [test-cljs]]
'[powerlaces.boot-cljs-devtools :refer [cljs-devtools dirac]]
'[codox.boot :refer [codox]]
'[adzerk.bootlaces :refer :all])
(bootlaces! +version+ :dont-modify-paths? true)
(task-options!
pom {:project 'vadelabs/flowparser
:version +version+
:description +description+
:url "https://github.com/pntripathi9417/flowparser"
:scm {:url "https://github.com/pntripathi9417/flowparser"}
:license {"Eclipse Public License"
"http://www.eclipse.org/legal/epl-v10.html"}})
(deftask build []
(comp (speak)
(cljs)))
(deftask run []
(comp (serve)
(watch)
(cljs-repl)
(dirac)
(reload)
(build)
(target)))
(deftask production []
(task-options! cljs {:optimizations :advanced})
identity)
(deftask development []
(task-options! cljs {:optimizations :none}
reload {:on-jsload 'flowparser.app/init})
identity)
(deftask dev
"Simple alias to run application in development mode"
[]
(comp (development)
(run)))
(deftask docs []
"Generates documentation for the library"
(comp (codox
:name "vadelabs/flowparser"
:description +description+
:version +version+
:language :clojurescript
:output-path ".")
(target :dir #{"docs"})))
My Main app.cljs file is as follows:
(ns flowparser.app
(:require [clojure.spec.alpha :as spec]))
(defn init []
"Hello World")
As I am just starting out with clojure
any suggestions regarding these kind of issues would be greatly helpful.
Thanks
回答1:
You're picking up spec at a particularly tricky moment. Clojure 1.9.0-alpha16 just changed namespaces from clojure.spec
to clojure.spec.alpha
.
ClojureScript has made the equivalent changes on master but a new version has not yet been released. So for ClojureScript <= 1.9.521, you'll need to instead use clojure.spec
as the namespace you require.
回答2:
Maybe requiring a newer version of spec.alpha could fix your issue.
Try adding this to your dependencies
[org.clojure/spec.alpha "0.1.108"]
An explanation from the maintainer is here https://groups.google.com/d/msg/clojure/10dbF7w2IQo/s5kUM4tCAAAJ
来源:https://stackoverflow.com/questions/43829877/no-such-namespace-clojure-spec-alpha-in-clojurescript-project-setup