Способы объединения модулей JavaScript в один файл для развертывания? - PullRequest
3 голосов
/ 13 ноября 2011

При разработке я использую JS-модули для лучшей организации своего кода.Например, у меня есть module1.js, module2.js, и оба модуля включены в main.js с LABjs

$LAB
.script("module1.js").wait()
.script("module2.js").wait();

Однако я также использую Google Closure Compiler для оптимизации кодаи для этого требуется интегрированный файл javascript в соответствии с документацией .

Самое простое решение этой проблемы - скомпилировать ваши функции вместе с частью вашей программы, которая вызывает эти функции.

Итак, я хочу объединить все модули в один файл js , который затем можно будет скомпилировать с помощью Google Closure Compiler.LabJS работает на стороне клиента и не будет работать на стороне сервера.Так есть ли инструменты для выполнения этой работы?Или другая библиотека поддерживает интеграцию серверных модулей?

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Я нашел RequireJS предложил инструмент оптимизации, который может

Объединяет связанные сценарии вместе в слои сборки и минимизирует их с помощью UglifyJS (по умолчанию) или Closure Compiler (опция при использовании Java).

В документации для страницы со следующим main.js, которая импортирует one.js, two.js и three.js:

require(["one", "two", "three"], function (one, two, three) { });

Этот инструмент оптимизации может сжать их в один интегрированный файл

node ../../r.js -o name=main out=main-built.js baseUrl=.

0 голосов
/ 13 ноября 2011

Теоретически, вы можете просто объединить файлы с помощью простой утилиты, такой как cat . Файлы * .js - это просто сегменты Javascript, и (при условии, что ни один из них не имеет синтаксических ошибок) их можно объединить так же, как файлы * .txt. Вы должны делать это при каждом развертывании, чтобы входные файлы могли оставаться разделенными, а closurebuilder запускался для сгенерированного артефакта. например,

compile-js:
  // Concatenate the input files
  cat js/main.js js/module1.js js/module2.js > generated/intermediate.js
  // Compile the optimised output
  closurebuilder.py \
    --root=closure-library/ \
    --root=generated/ \
    --namespace="myproject.start"

Кроме того, вы рассматривали второе решение? Для этого вам нужно «экспортировать» символы, помеченные Closure как мертвый код, это так же просто, как создать глобальную переменную с тем же именем:

window['LAB'] = $LAB;

Лучший подход будет зависеть от того, сколько функций вам нужно включить, и от того, требуется ли вам Javascript оставаться разделенным после компиляции (некоторые сложные библиотеки не очень хорошо работают при интеграции в сторонний код).

...