Как создать базовое приложение ClojureScript Hello World в Lighttable?
Документация кажется довольно редкой в LightTable. Я хочу создать очень простое веб-приложение ClojureScript CowjureScript в LightTable в качестве отправной точки для построения. У меня есть Instarepl в Clojure, работающий нормально, а затем создаю новый файл с именем dummy.cljs, содержащий следующее:
(ns dummy)
(js/alert "Hello lighttable")
Как я могу запустить это?
Update
Я понял это сейчас, и я опубликую видео о том, как это сделать, поскольку это довольно визуально.
Обновление 2
Вот видео:
http://www.youtube.com/watch?v=GZ6e0tKqYas
Ответы
Ответ 1
- вам следует сначала создать проект через lein (https://github.com/technomancy/leiningen), как описано здесь
- затем добавьте cljsbuild в ваш проект, как описано здесь
- выполняется с терминала (или cmd on win) одновременно
lein ring server
и lein cljsbuild auto
, чтобы запустить локальный веб-сервер с autocompile clojurescript
- подключите LightTable (через консоль внизу) к проекту, который вы создали на шаге 1
- теперь вы можете редактировать clojure и cljs в LightTable, а изменения должны быть доставлены в ваш браузер. Но не забудьте проверить терминал на наличие ошибок, поскольку они, вероятно, не будут показаны в LT.
Более простой способ будет использовать http://clojurescriptone.com/ и lein repl в качестве основного инструмента разработки и использовать LT только как дополнительный инструмент для решения некоторых небольших проблем внутри один-два файла.
Ответ 2
Хорошо, LightTable хорош как REPL на этапе разработки, но когда вы закончите, вам нужно скомпилировать ClojureScript для выполнения (т.е. с node.js).
Настройка для LightTable
- Откройте файл clojurescript с расширением cljs.
- Нажмите Control-space
- Выберите соединение: добавьте соединение и выберите LightTable
![введите описание изображения здесь]()
![введите описание изображения здесь]()
Затем вы можете дать выражение ClojureScript и оценить его с помощью команды-enter или shift-command-enter (с Mac OS X).
![введите описание изображения здесь]()
Настройка для node.js
Самый простой способ - использовать лейн, но если вы не хотите использовать лейн, это один из возможных способов.
Шаг 1: Загрузите компилятор cljs.jar
Или загрузите более новую версию, если она доступна.
Шаг 2. Создайте исходный каталог и создайте файлы
└── src
├── build.clj
└── smcho
└── core.cljs
build.clj выглядит следующим образом, вы можете изменить пространство имен и, соответственно, имя каталога по мере необходимости.
(require 'cljs.build.api)
(cljs.build.api/build "src"
{:main 'smcho.core
:output-to "main.js"
:target :nodejs})
Это код ClojureScript; добавляется основной метод.
(ns smcho.core
(:require [cljs.nodejs :as nodejs]))
(nodejs/enable-util-print!)
(defn factorial [x]
(reduce * (range 1 (inc x))))
(defn fib [n]
(if (<= n 1)
1
(+ (fib (- n 1)) (fib (- n 2)))))
(defn sort-seq []
(sort (repeat 100 (rand-int 2000))))
(defn time-fun [fun]
(let [start (.getTime (js/Date.))
_ (fun)
end (.getTime (js/Date.))
result (- end start)]
result))
(defn time-it [fun]
(let [values (for [i (range 200)] (time-fun fun))]
(/ (apply + values)
(count values))))
(defn -main []
(println "(factorial 5000) \t Avg: " (time-it #(factorial 5000)))
(println "(fib 20) \t Avg: " (time-it #(fib 20)))
(println "(sort-seq) \t Avg: " (time-it #(sort-seq))))
(set! *main-cli-fn* -main)
Шаг 3: постройте, чтобы получить main.js script.
java -cp cljs.jar:src clojure.main src/build.clj
Шаг4: Запустите node.js
node main.js
Это покажет результаты выполнения.
(factorial 5000) Avg: 0.65
(fib 20) Avg: 0.135
(sort-seq) Avg: 0.135
Код примера копируется из http://blog.gonzih.me/blog/2013/01/23/clojurescript-on-beaglebone-simple-benchmark-with-node-dot-js/.
Ответ 3
Чтобы использовать световую таблицу с clojurescript, одно отличие от проекта clojure:
Если я подключу некоторую страницу с браузером (внутренним или внешним), мне нужно запустить:
lein cljsbuild auto
в терминале.
в противном случае jog, связанный с goog, не может быть найден.
Вы можете проверить здесь:
https://groups.google.com/forum/#!topic/light-table-discussion/fJBLMzmZSWw