¿Hay un buen flujo de trabajo ClojureScript?
workflow read-eval-print-loop (5)
El tiempo de compilación para un archivo pequeño es demasiado grande.
Prueba :optimizations :whitespace
. Y usa lein cljsbuild auto
Segundo, de vez en cuando recibo cosas como esta: ......
No he encontrado este problema antes. Parece un error en cljsbuild. Intenta cambiar otra versión tal vez. Estoy usando [lein-cljsbuild "1.0.2"]
con [org.clojure/clojurescript "0.0-2156"]
. El 1.0.3
no funciona en mi configuración.
La tercera cosa que no pude entender es REPL
En su caso, el punto clave es encontrar una manera de recargar espacios de nombres sin reiniciar REPL o recargar la página .
Me parece que load-file
es bueno para esto.
Mi flujo de trabajo es:
- Primer inicio REPL:
rlwrap lein trampoline cljsbuild repl-listen
- Asegúrese de que haya
(repl/connect "http://localhost:9000/repl")
en mi código. - Abre mi página en el navegador.
- Hacer alguna prueba
(my-namespace/my-func abc)
- Editar mis codigos
- En mi REPL, ejecute
(load-file "path-to-my-file.cljs")
- Repetir
4
Esto sigue siendo un flujo de trabajo bastante molesto. load-file
es lento y frágil, por lo que a veces el navegador lo prueba. Espero que alguien pueda dar una mejor respuesta.
Estoy tratando de usar ClojureScript para un proyecto. Para ser un desarrollador feliz, necesito un bucle de retroalimentación rápido: escriba un código y véalo tan pronto como sea posible. También me encantaría usar REPL en el contexto de la página actual.
Estoy usando lein-cljsbuild
y, debido a los problemas que tengo, creo que no lo configuré correctamente.
En primer lugar, el tiempo de compilación para un archivo pequeño es demasiado grande, incluso después del "calentamiento de JWM" con :optimizations :simple
:
Compiling "resources/public/js/cljs.js" from ["src-cljs"]...
Successfully compiled "resources/public/js/cljs.js" in 8.233018 seconds.
Compiling "resources/public/js/cljs.js" from ["src-cljs"]...
Successfully compiled "resources/public/js/cljs.js" in 5.522989 seconds.
Compiling "resources/public/js/cljs.js" from ["src-cljs"]...
Successfully compiled "resources/public/js/cljs.js" in 8.144354 seconds.
Segundo, de vez en cuando consigo cosas como esta:
Compiling "resources/public/js/cljs.js" from ["src-cljs"]...
Compiling "resources/public/js/cljs.js" failed.
Exception in thread "main" java.lang.NullPointerException
at java.util.regex.Matcher.getTextLength(Matcher.java:1140)
at java.util.regex.Matcher.reset(Matcher.java:291)
at java.util.regex.Matcher.<init>(Matcher.java:211)
at java.util.regex.Pattern.matcher(Pattern.java:888)
at clj_stacktrace.utils$re_gsub.invoke(utils.clj:6)
# ... many similar useless lines
at clojure.lang.Var.applyTo(Var.java:532)
at clojure.main.main(main.java:37)
Estos stacktraces (la mayoría de las veces relacionados con los errores de sintaxis, según entendí por la experimentación), son peores que no útiles: no solo proporcionan ninguna pista sobre el error, sino que también detienen la recompilación automática. Después de cada apilamiento, debería hacer estas cosas:
- Averigüe cuál es el problema, utilizando una técnica que llamo "pretender que usted es un analizador". Gracias a Dios, es Lisp y lo único que debo hacer es contar cuidadosamente los paréntesis correspondientes.
- Presione
Cmd-C
en el shell donde selein cljsbuild auto
ellein cljsbuild auto
- Ejecutar
lein cljsbuild auto
nuevo - Haga algún cambio inútil, como insertar una nueva línea, en el archivo, para desencadenar una nueva construcción.
- Espere unos 30 segundos hasta que el archivo se vuelva a compilar, ya que la JVM debe "calentarse" nuevamente.
- En muchos casos, en este punto, obtengo otro seguimiento de pila, después del cual tengo que hacer espuma, enjuagar y repetir todo el maldito procedimiento.
La tercera cosa que no pude entender es REPL. De los interwebs he aprendido cómo conectar rlwrap lein trampoline cljsbuild repl-listen
a la página actual. Sin embargo, cada error de recarga, navegación y sintaxis (por lo que no debe olvidarse de usar rlwrap
y presionar una tecla de flecha) en la consola hace que el REPL se atasque completamente. Tengo que reiniciarlo (~ 10 segundos) y volver a cargar la página después de eso, luego comenzar de nuevo a probar cosas en un ambiente amigable.
Creo que, probablemente, alguien lo ha descubierto todo y tiene un flujo de trabajo que funciona. Ayúdeme a configurarlo todo desde el principio, porque me siento como un ingeniero de software fallido.
Cuando está en modo de desarrollo, active : optimizaciones a : ninguna , hace una gran diferencia, no cambiará el tiempo de compilación inicial, pero cualquier cambio adicional tomará típicamente milisegundos.
Tengo lo siguiente en mi proyecto.clj
:cljsbuild {:builds [{;; Directories of interest:
:source-paths ["src"]
;; Compiler flags:
:compiler {;; Where to save the file:
:output-to "resources/public/js/app.js"
;; Where to put the output directory
:output-dir "resources/public/js/out"
;; Optimizations:
:optimizations :none
}}]}
Echa un vistazo a figwheel ! Es como el hígado en esteroides.
¡Trabajar con clojurescript y el desarrollo de front-end nunca fue tan divertido!
Compruébelo usted mismo (la demostración está un poco desactualizada, ¡es incluso mejor ahora!)
No solo vuelve a cargar la página cuando se cambian los archivos, sino que también le brinda una programación interactiva de la que habla Bret Victor (le recomiendo que vea esa conversación si no lo ha hecho)
He intentado en Emacs esta herramienta https://github.com/cemerick/austin y funciona muy bien como se puede ver en su demostración y screencast.
Que tengas un buen desarrollo juan.
Para mí, Catnip proporciona la mejor experiencia de desarrollo para ClojureScript en este momento.