Комментарии 19
А почему не webpack? Он аналогично поддерживает AMD плюс CommonJS, нарезание файлов на чанки, быстрее пересборка, чем r.js. Ну а плагинами вообще доруливается все что угодно. Хоть сборка стилей на проекте.
+5
На сколько я помню, в webpack нет возможности загружать модули по требованию, это только сборщик модулей (module bundler), а не загрузчик модулей (module loader), как requirejs. В статье описано несколько кейсов, когда динамическая загрузка модулей очень полезна.
0
Динамический require (загрузка по требованию) в webpack все-таки есть.
webpack.github.io/docs/code-splitting.html#defining-a-split-point
Если же вы хотите загрузить целый бандл, то это решается через loaders:
github.com/webpack/bundle-loader
webpack.github.io/docs/code-splitting.html#defining-a-split-point
Если же вы хотите загрузить целый бандл, то это решается через loaders:
github.com/webpack/bundle-loader
+2
В нативных ES6 модулях можно ли так организовать сборку чтобы было разденение как миниумум на 2 итоговых JS файла, один для кода приложения и один для библиотек? То есть код приложения ведь в любом случае будет ссылаться на библиотечный функицонал (импортировать), но при этом помещать библиотеки внутрь итогового JS файла приложения не нужно. При этом пречислять все модули для склеивания в один файл не хочется, нужно чтобы сборщик сам построил дерево зависимостей и собрал в один файл. Такая возможность есть при использовании browserify (опция/метод external).
0
Еще как можно.
0
Это не совсем то, насколько я понял таким образом в shared-bundle.js будут пересекающиеся модули (используемые и в first и в second деревьях), а нужно чтобы в shared-bundle.js были только библиотеки third-party/vendor (явное указание). Но плагаю что средства есть и для этого, просто я не сталкивался с ними, и хотел сразу узнать по опыту бывалых, без гугления.
0
github.com/webpack/docs/wiki/list-of-plugins#commonschunkplugin
ES6-модули грузятся через бабель, сборку осуществляет webpack/
ES6-модули грузятся через бабель, сборку осуществляет webpack/
0
Совершенно верно, и с помощью System.js и Webpack можно достичь желаемого. Тут нужно пробовать, конечно.
С помощью SystemJS Builder можно, например:
С помощью SystemJS Builder можно, например:
// Отдельно построить vendor-бандл
builder.build('third-party/vendor/**/*', 'shared-bundle.js', { minify: true, sourceMaps: true });
// И исключить модули shared-bundle.js из app.js
builder.build('app/**/* - shared-bundle', 'app.js', { minify: true, sourceMaps: true });
0
В Browserify можно, я дроблю так:
То-есть я в одном говорю, что они внешние, в другом говорю, что подключи только их.
var dependencies = [
'react',
'react-router',
'react-bootstrap',
'react-router-bootstrap',
'moment'
];
var watcher = browserify({
entries: [path.ENTRY_POINT],
debug: options.development,
cache: {}, packageCache: {}, fullPaths: false
});
watcher.external(dependencies);
//....
var vendorsBundler = browserify({
debug: options.development,
require: dependencies
});
/....
То-есть я в одном говорю, что они внешние, в другом говорю, что подключи только их.
0
r.js берет на себя слишком многое, поэтому плохо интегрируется, к примеру, в gulp.js.
Да и вообще — зачем использовать require.js, когда у нас давно есть SystemJS (и SystemJS Builder), которые совершенно прозрачно и без лишних усилий «умеют» все модули, включая ES6 (через Babel, Traceur или TypeScript)?
Да и вообще — зачем использовать require.js, когда у нас давно есть SystemJS (и SystemJS Builder), которые совершенно прозрачно и без лишних усилий «умеют» все модули, включая ES6 (через Babel, Traceur или TypeScript)?
+1
Кроме интеграции у r.js есть другой недостаток — он не режет require/define. Придётся либо тащить сам require на клиент, либо заменять на что-то минималистичное типа almond.js. Есть вариант дописать скрипт который при сборке будет резать эти функции. В старом jquery 1.11 такую штуку реализовали для сборки. Если любопытно, можно посмотреть тут: github.com/jquery/jquery/blob/1.11-stable/build/tasks/build.js.
0
Ну как по мне — «компиляция» в AMD и какой-нибудь минималистичный define/require — вполне себе вариант за неимением альтернативы. Я, напротив, обычно вижу необходимость добавлять всяческие define-обертки (например, над js-файлами, написанными как CommonJS-модули), а не обрезать их (иначе зачем их тогда вообще писать?).
0
Отличная сравнительная таблица webpack.github.io/docs/comparison.html показывает, что и какой сборщик модулей умеет. Особенно впечатляет параметр Runtime overhead у webpack.
0
Если я не ошибаюсь, то по тестируемости веб приложений, подход AMD уступает CommonJS. AMD приходится тестировать в браузере или при помощи phantomjs тогда как CommonJS можно тестировать как обычные node.js модули.
0
Вот еще не слишком популярная, но рабочая библиотека для commonjs модулей, умеет подгружать модули синхронно и асинхронно.
+1
Поправьте, пожалуйста, после «Для работы понадобится всего один единственный тег» разметку, хорошо бы тэг обернуть как код, чтобы не было полпоста моноширинным шрифтом
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Модули JavaScript