2013-03-13 2 views
5

Я пытаюсь скомпилировать некоторые библиотеки JS, которые у нас есть с lein-cljsbuild, чтобы их интегрировать в нашу базу кода ClojureScript. Сначала я добавил несколько goog.provide в начало каждого файла, и файлы иерархически организованы в дереве каталогов в соответствии с их пространством имен (например, на Java). Это пространство имен abc находится в src-js/libs/a/b/c.jsКомпиляция внешних JS-файлов с помощью Cljsbuild в ClojureScript

Я поместил JS-файлы в корневой каталог проектов в src-js/libs, и у меня есть следующее: компилятор варианты LEIN-cljsbuild:

{:id "prod", 
:source-paths ["src-cljs" "src-js"] 
:compiler 
{:pretty-print false, 
    :libs ["libs/"] 
    :output-to "resources/public/js/compiled-app.js", 
    :optimizations :simple}} 

ни один из файлов JS не компилируются в файл при компиляции приложения. Что не так?

Я также попытался поместить их в ресурсы/закрытие-js/libs без успеха.

Я использую lein-cljsbuild 0.3.0.

ответ

4

Во-первых, в отличие от того, что предлагается в некоторых текстах, вам не нужно включать локальные ячейки библиотеки закрытия в любой оператор конфигурации classpath в файле project.clj. Поэтому, если каталог «src/js» не включен в ваш оператор «source-paths:» для какой-либо другой цели, вы можете удалить его.

Во-вторых, единственное, что нужно добавить к вашему проекту.clj, ради приведения вашего закрытого кода закрытия, - это сделанная вами ссылка «libs:»; НО, в отличие от того, что вы ввели, эта ссылка должна быть связана с конкретным * .js-файлом (или файлами), а не просто с каталогом. Поэтому, если библиотека, которую вы хотите использовать, находится в файле с именем test.js и находится в каталоге/src/js, ваш файл libs: будет выглядеть следующим образом: «src/js/test.js». См. Примечания к выпуску cljs-build, если вы хотите использовать опцию каталога libs по умолчанию.

В-третьих, (и похоже, что вы это уже знаете, но это то, что меня подстегнуло), если вы используете REPL (поддерживаемую браузером опцию cljsbuild), вы все равно не сможете загрузить/reference/использовать свои ресурсы частной библиотеки из этого REPL до тех пор, пока вы не включите: require statement где-нибудь в источнике для вашего compiled-app.js (например, «(ns testing (: require [myprivatelib]))), ТОГДА вы должны повторно -compile (lein cljsbuild один раз) и перезагрузите страницу своего браузера ссылкой на compiled-app.js. Это приводит к тому, что база кода. В противном случае ваш браузер REPL просто будет настаивать на том, что пространство имен, указанное в вашей библиотеке закрытия, не определено.

Надеюсь, это поможет.

+0

src-js (минус, а не слэш!) Не находится в пути к классам, поэтому я добавляю для этого. Вам не нужно указывать конкретную библиотеку, вы можете указать каталог, она работает, но у меня была ошибка: она не перекомпилирует автоматически файл в иерархии. См. Отслеживание ошибок в cljsbuild. Наконец, мои файлы не были скомпилированы, потому что они не были обязательными в файле cljs. б) произошла ошибка с файлом, содержащим символы минус/дефис. Смотрите также трекер ошибок. – z1naOK9nu8iY5A

+0

Хорошо, действительно, можно указать целую директорию для компиляции JS-файлов. Как вы упомянули, каталог должен быть указан с помощью ключевого слова: lib и НЕ в пути источника: source. В моем примере: libs должен быть «src-js/libs», а затем он работает. – z1naOK9nu8iY5A

 Смежные вопросы

  • Нет связанных вопросов^_^