Я понял это, и это не очень сложно, но есть несколько ошибок.
По сути, вы можете использовать скрипт генерации зависимостей calcdeps.py ( вы должны прочитать calcdeps.py docs ) в одном из нескольких режимов:
- Создание файла deps.js
- Объединение всего в один файл, при необходимости компиляция его с помощью компилятора закрытия.
Для разработки вы должны использовать (1), так как он позволяет вам не запускать calcdeps.py после редактирования источников JS, если вы не внесете изменения в дерево зависимостей. Остальная часть ответа об этом, я еще не пробовал другой.
Вот что я сделал для его генерации:
#!/bin/bash
cd closure-library/closure/goog
python ../bin/calcdeps.py -p ../../../js -o deps > ../../../my-deps.js
... при условии следующей структуры каталогов:
project/
closure-library/ (as checked out from SVN)
js/ (my JS code)
app.html
(параметр -p
перебирает все js-файлы в указанном каталоге, и в документах говорится, что вы можете указать несколько каталогов для поиска, если нужно.)
Вышеуказанный вызов создает файл my-deps.js рядом с основным app.html, который я использую для запуска приложения. Созданный файл содержит информацию о моих JS-файлах в js/
и выглядит следующим образом:
goog.addDependency('../../../js/controllers.js', ['proj.controllers'], []);
goog.addDependency('../../../js/ui.js', ['proj.ui'], ['proj.controllers']);
- где первая строка это путь к моему файлу JS относительно closure-library / closure / goog / base.js (это важно!), Второй массив - список goog.provide
-d строк, а последний массив - это список goog.require
-d строк.
Теперь в app.html у меня есть:
<script src="closure-library/closure/goog/base.js"></script>
<script src="my-deps.js"></script>
<script>
goog.require("proj.ui");
</script>
<script>
// here we can use the required objects
</script>
Примечание:
- В дополнение к base.js для closure, я включаю мои сгенерированные deps.js
- Как упоминалось в руководстве , вызов
goog.require
должен быть в отдельном теге сценария , поскольку он добавляет тег сценария для загрузки необходимых сценариев, и они загружаются после завершения обработки текущего тега сценария. .
Gotchas:
- Описанная выше проблема с путями относительно base.js.
goog.require
создает URL-адрес сценария для загрузки путем объединения базового URL-адреса base.js (т. Е. Без base.js leafname) и первого параметра для goog.addDependency в deps.js.
- calcdeps.py плохо работает в Windows, в частности с использованием обратной косой черты в строковых литералах deps.js
- Если что-то не работает, вы можете просмотреть все вопросы, касающиеся calcdeps , и убедиться, что у вас есть актуальная проверка.