2014-10-08 3 views
3

У многих tutorials есть файл goog/base.js, включенный в тег скрипта, а затем используйте goog.require('your_script'), чтобы запустить приложение. Например, вот заголовок из HTML-файла из связанного учебника:Понимание отношений между Clojurescript и компилятором Google Closure

<script type="text/javascript" src="out/goog/base.js"></script> 
<script type="text/javascript" src="hello.js"></script> 
<script type="text/javascript">goog.require('hello');</script> 

Я понимаю, что Google Closure Library используется для компиляции Clojurescript в JavaScript. Почему это требуется на странице HTML? Не может ли он скомпилировать себя (или его необходимые компоненты с использованием передовой компиляции) в hello.js в приведенном выше примере?

То, что я действительно хочу, - это всего лишь один файл javascript, а не десятки файлов в /goog/. Разве это не компилятор? Я просто не понимаю, почему он должен быть включен в страницу.

ответ

8

Вам нужно включить заголовок goog/base.js, когда вы компилируете: optimizations: none.

Причина, по которой: optimizations: none производит несколько файлов, заключается в том, что компилятор Google Closure вообще не запускается с этим параметром. Вместо этого компилятор ClojureScript просто записывает скомпилированный JavaScript непосредственно в файл, а не передает его через компилятор Closure. Поэтому созданный JavaScript не оптимизирован, а несколько файлов не объединены в один файл JavaScript. Существует также обсуждение этого режима компиляции, доступного на стр. 21 ClojureScript: Up and Running (бесплатный образец, включая страницу 21, доступен here)

Я лично редко использую: оптимизация: нет и, скорее, используется: просто во время разработки и: продвинутый для производства.

Оба: простые и: продвинутые производят только один файл JavaScript в качестве вывода, который тогда требует только одного тега сценария, например.

<script src="/js/myapp.js" type="text/javascript"></script> 

Я представил конфигурацию cljsbuild образец ниже:

:cljsbuild {:builds [{:id "dev" 
         :source-paths ["src"] 
         :compiler {:output-to "resources/static/js-dev/myapp.js" 
            :output-dir "resources/static/js-dev" 
            :optimizations :simple 
            :preamble ["react/react.min.js"] 
            :externs ["react/externs/react.js"] 
            :source-map "resources/static/js-dev/myapp.js.map" 
            :pretty-print true}} 

         {:id "live" 
         :source-paths ["src"] 
         :compiler {:output-to "resources/static/js-live/myapp.js" 
            :output-dir "resources/static/js-live" 
            :optimizations :advanced 
            :pretty-print false 
            :preamble ["react/react.min.js"] 
            :externs ["react/externs/react.js"]}}]} 
+0

Спасибо! У меня было ощущение, что я пропустил что-то простое. –