Могу ли я объединить модули RequireJs и сам require.js в один js-пакет

Я использую RequireJs Optimizer, чтобы объединить все модули в один файл - app.js

На производстве у меня есть два js-файла: app.js и require.js

Рабочий HTML имеет следующий скрипт-тег:

<script data-main="app.js" src="require.js"></script>

Это приведет к двум запросам файлов js при запуске.

Вопрос: возможно ли объединить все, включая все модули и сам файл require.js, в один файл, поэтому у меня только один запрос при запуске?

2 ответа

Решение

Ответ здесь http://requirejs.org/docs/optimization.html

Мне пришлось включить require.js через опцию 'include' r.js.

С gulp task и gulp-requirejs это выглядит так:

requirejs({
   paths: {
      requireLib: 'lib/require'
   },
   include: ['requireLib'],
   out: 'bundle.js'
 })
.pipe(insert.append('require(["app"]);'))

Обратите внимание, я должен был добавить require(["app"]) до конца js-bundle для запуска основного модуля.

Теперь я могу ссылаться только на "bundle.js" на странице и иметь один запрос.

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

AlmondJS звучит как хорошая подгонка, отрывки из их документации:

Запасной загрузчик AMD для RequireJS. Он обеспечивает минимальное использование AMD API, включая поддержку подключаемых модулей загрузчика. Полезно только для встроенных / встроенных модулей AMD, не выполняет динамическую загрузку.

...

Включая миндаль в собранный файл, нет необходимости в RequireJS. размер миндаля составляет около 1 килобайта при минимизации с помощью Closure Compiler и gzipped.

Например

node r.js -o baseUrl=. name=path/to/almond include=main out=main-built.js wrap=true

Будет выводить что-то вроде этого:

(function () {
    //almond will be here
    //main and its nested dependencies will be here
}());

По общему признанию я не использовал это, но я слышал об этом.

Другие вопросы по тегам