Предположения: я полагаю, вы уже знаете, как вызвать два сервера, необходимые для Light Table: clojure repl и браузер.
По сути, это ссылка: http://grokbase.com/t/gg/clojure/142rsp4rc8/om-trouble-with-goog-reference.
подсказал мне решение.
Похоже, что любой файл, который не находится в каталоге проекта src, полностью зависит от браузера "repl" при поиске необходимых ему библиотек. Итак, решение состоит в том, чтобы добавить теги в ваш index.html для любых js-библиотек, которые вы хотите включить в ns:
<html>
<head>
<script type='text/javascript' id='lt_ws' src='http://localhost:54792/socket.io/lighttable/ws.js'></script>
<script src="out/goog/base.js" type="text/javascript"></script> <!-- add this -->
</head>
<body>
hello from mies-test
<script src="out/mies_test.js" type="text/javascript"></script>
</body>
</html>
Затем вы должны сделать следующее:
1) Убедитесь, что у вас есть какие-либо библиотеки js (кроме goog) в зависимостях вашего project.clj:
:dependencies [[org.clojure/clojure "1.6.0"]
[org.clojure/clojurescript "0.0-2755"]
[domina "1.0.3"]
[prismatic/dommy "1.0.0"]
[enfocus "2.1.1"]
2) запустите «lein cljsbuild один раз». Вам необходимо убедиться, что в вашем выходном каталоге есть goog / base.js и cljs / core.js:
@HP_LAPTOP_ENVY /c/vtstuff/clojure_stuff/projects/mies2/out
$ ls *
cljs_deps.js mies_test.js
cljs:
core.cljs core.cljs.cache.edn core.js core.js.map
clojure:
browser
goog:
array base.js disposable functions iter log mochikit promise structs uri
asserts debug dom html json math net reflect testing useragent
async deps.js events i18n labs messaging object string timer
mies2:
core.cljs core.cljs.cache.edn core.js core.js.map
Если вы выполните «lein clean», он удалит каталог «out». Выполнение «lein cljsbuild once» приведет к его перестройке. Сделайте это, если хотите начать с чистого листа.
3) Обновите URL-адрес вашего браузера, например
file:///C:/vtstuff/clojure_stuff/projects/mies2/index.html
4) Теперь, когда я запустил (ns foo), я получил:
Error: goog.require could not find: cljs.core
at Error (<anonymous>)
at Object.goog.require (file:///C:/vtstuff/clojure_stuff/projects/mies2/out/goog/base.js:470:13)
-> Кажется, это противоречивая проблема. Мне удалось запустить другой проект, не добавляя cljs / core.js в index.html. В основном вы можете увидеть здесь, как любой рабочий буфер полностью зависит от того, о чем знает ответ браузера. Основной ответ clojure автоматически знает о любых зависимостях, но мне снова кажется, что нужно добавить его в index.html:
<head>
<script type='text/javascript' id='lt_ws' src='http://localhost:61756/socket.io/lighttable/ws.js'></script>
<script src="out/goog/base.js" type="text/javascript"></script>
<script src="out/cljs/core.js" type="text/javascript"></script> <!-- add this -->
</head>
5) Снова обновите браузер, и теперь оценки в scratch.cljs работают:
(+ 1 1 ) 2
(ns foo) nil
(namespace ::x) "foo"
6) если вы хотите добавить dommy в свой ns:
(ns foo-2
(:require [dommy.core :as dommy]))
#<Error: goog.require could not find: dommy.core>
Error: goog.require could not find: dommy.core
Вам нужно будет создать файл dommy / core.js в каталоге out. Вам нужно будет извлечь файлы .cljs из dommy jar (в репозитории maven ".m2"), а затем добавить их в каталог src. Затем выполните команду cljsbuild once, чтобы сгенерировать dommy / core.js, затем добавьте ссылку на index.html, как мы это сделали для goog и cljs. Я сделал это, и это сработало. Однако теперь я понимаю, что лучше всего, чтобы ваш царапинный ответ вытащил в "основные" cljs, а затем просто сослаться на артефакты из вашего рабочего файла (или просто сделать все в основном cljs, как я думаю, предыдущий человек был о том, когда он сказал «избегая« живого уничтожения »):
(ns foo-3
(:require [mies2.core]))
mies2.core/abc 7
7) К сожалению, вы не можете поместить рабочий файл в тот же адрес, что и основной.
cljs:
(ns mies2.core)
#<Error: Namespace "mies2.core" already declared.>
Error: Namespace "mies2.core" already declared.
В любом случае, разобравшись со всем этим, я смог запустить демонстрацию куба three.js. Может быть, все это покажется очевидным, когда я ближе познакомлюсь с «реплингом» в реальном времени, но вначале это определенно вызовет у меня большое замешательство.
Удачного кодирования.
person
vt5491
schedule
17.02.2015