2015-02-05 9 views
5

lein cljsbuild ha difficoltà a trovare uno spazio dei nomi/file definito accanto a un altro spazio dei nomi/file a meno che non mi assicuri che siano compilati in un determinato ordine.Il compilatore ClojureScript non trova lo spazio dei nomi/file nella stessa directory

mio layout directory assomiglia a questo:

project/ 
    project.clj 
    src/ 
    cljs/ 
     contempo/ 
     common/ 
      defs.cljs 
     view/ 
      core.cljs 
      navigation.cljs 

navigation.cljs ha alcune cose per costruire componenti Om per navigare all'interno della pagina, e core.cljs è il principale punto di accesso per questa particolare pagina. navigation.cljs inizia con:

(ns contempo.view.navigation (:require ...)) 

core.cljs inizia con:

(ns contempo.view.core (:require [contempo.view.navigation :as navigation])) 

Quando eseguo lein cljsbuild, ottengo:

solace:Groov jfischer$ lein cljsbuild auto 
Compiling ClojureScript. 
Compiling "war/view/js/app.js" from ["src/cljs/contempo/common" "src/cljs/contempo/view"]... 
Compiling "war/view/js/app.js" failed. 
clojure.lang.ExceptionInfo: failed compiling file:src/cljs/contempo/view/core.cljs 

... snipped stacktrace ... 

Caused by: clojure.lang.ExceptionInfo: No such namespace: contempo.view.navigation at line 1 src/cljs/contempo/view/core.cljs 

posso farlo funzionare, eliminando tutti i riferimenti a contempo.view.navigation da core.cljs, eseguendo lein cljsbuild auto e lasciando terminare la compilazione, quindi ripristinandoli e salvandoli (quindi cljsbuild preleva le modifiche), ma questo è sciocco e non dovrebbe essere necessario.

mio project.clj assomiglia:

(defproject contempo "0.0.0-SNAPSHOT" 
    :description "Experimenting with ClojureScript and Om" 
    :dependencies [[org.clojure/clojure "1.6.0"] 
       [org.clojure/clojurescript "0.0-2740"] 
       [org.clojure/core.async "0.1.346.0-17112a-alpha"] 
       [org.omcljs/om "0.8.7"]] 

    :plugins [[lein-cljsbuild "1.0.4"]] 

    :clean-targets ^{:protect false} ["war/view/js/app.js" 
            "war/view/js/out"] 

    :cljsbuild {:builds [{:id "view-dev" 
         :source-paths ["src/cljs/contempo/common" 
             "src/cljs/contempo/view"] 
         :compiler {:output-to "war/view/js/app.js" 
            :output-dir "war/view/js/out" 
            :optimizations :none 
            :cache-analysis true 
            :source-map true}}]}) 

C'è qualcosa ovvio che sto facendo male? Questo sembra abbastanza simile a ogni progetto ClojureScript che ho visto.

Aggiornamento: progetto scheletro piccolo che mostra l'errore è qui: namespace-error-demo.zip

+0

Funziona per me senza errori/avvisi. Sospetto che tu abbia delle dipendenze circolari o che uno dei file sorgente non riesca a compilare. Inoltre, potrebbe valere la pena provare a usare il singolo percorso sorgente "" src/cljs/contempo/"' – Jarlax

+0

Controllato per le dipendenze circolari, collassato giù a un solo percorso sorgente, e in realtà rimosso quasi tutto il codice, e continuo a ricevere errore. Un piccolo progetto che lo dimostra è disponibile qui: [namespace-error-demo.zip] (http://www.mohiji.org/files/namespace-error-demo.zip) – Jonathan

+1

Ho appena scaricato e compilato la demo senza problemi. Prova con 'lein clean'. Se non funziona vai nella tua directory '~/.m2 /' ed elimina le tue dipendenze Clojurescript e Clojure, potrebbero essere in cattivo stato. – sbensu

risposta

4

La questione ha finito per essere: non ero obbedendo alle regole su come spazi dei nomi vengono risolti.

Con percorsi di origine di src/cljs/contempo/common e src/cljs/contempo/view, se ho richiesto lo spazio dei nomi contempo.view.whatever, il compilatore avrebbe cercarlo a src/cljs/contempo/common/contempo/view/whatever.cljs e src/cljs/contempo/view/contempo/view/whatever.cljs.

Ho dovuto usare src/cljs come directory di origine. Quello che volevo ottenere (lasciando fuori il codice per una data pagina che non ne aveva bisogno) era un po 'sciocco (dato che avrebbe comunque dovuto inserire ClojureScript) e ora è indirizzato correttamente grazie a proper Google Closure Module support in ClojureScript.

2

ho avuto questo stesso problema tutti oggi. Nel mio caso, la causa principale era avere file .cljs con "-" nel nome. Ho scoperto solo che questo era il problema dopo il passaggio a 0.0-3030, che fornisce migliori messaggi di errore per il rigoroso percorso del file alle convenzioni dello spazio dei nomi che hanno versioni più recenti del compilatore cljs.

si potrebbe desiderare di provare a cambiare :source-paths-["src/cljs"]

+0

Grazie mille! Stavo avendo lo stesso identico problema e non riuscivo a capirlo senza il tuo commento! –

Problemi correlati