Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No such namespace: clojure.spec.alpha in clojurescript project setup

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

like image 929
pntripathi9417 Avatar asked May 07 '17 09:05

pntripathi9417


People also ask

What is Clojure namespace?

A namespace is both a name context and a container for vars. Namespace names are symbols where periods are used to separate namespace parts, such as clojure. string . By convention, namespace names are typically lower-case and use - to separate words, although this is not required.

What is spec in Clojure?

spec is a Clojure library to describe the structure of data and functions. Specs can be used to validate data, conform (destructure) data, explain invalid data, generate examples that conform to the specs, and automatically use generative testing to test functions.


1 Answers

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.

like image 145
Alex Miller Avatar answered Nov 20 '22 12:11

Alex Miller