Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
А как же Babel, ES6, Coffee, TypeScript? А никак. Сборка создавалась для использования в больших и средних проектах в продакшене. Если у вас университетская исследовательская работа или домашняя страничка, зачем вам вообще сборка? А если всё это в серьезном проекте, да в продакшене… Положим еще раз руку на сердце, вы просто изучаете новые технологии за счет работодателя.
Так я его и выложил в этой статье!
Имею в виду проекты где можно было бы посмотреть код и минимальную документацию к нему.
Архитектура — слишком обширное понятие — это опыт
import angular from 'angular';
import uiRouter from 'angular-ui-router';
let aboutModule = angular.module('about', [
uiRouter
])
.config(($stateProvider) => {
"ngInject";
$stateProvider
.state('about', {
url: '/about',
template: '<about></about>'
});
})
export default aboutModule;
define([
'app'
], function(app) {
app.config(function($stateProvider) {
$stateProvider
.state('about', {
url: '/about',
template: '<about></about>'
});
});
})
Тут и gulp и webpack и lodash'евский шаблонизатор
Из-за Babel livereload работает дольше
Чтобы весь этот стек поддерживать нужно знать уйму технологий.
Как делать билд для продакшена
С этого момента можно только начать подумывать над подобной архитектурой.
Чем ES6-модули принципиально лучше AMD-модулей?
Можно сравнить:
import angular from 'angular';
import uiRouter from 'angular-ui-router';
export default angular
.module('about', [
uiRouter
])
.config(($stateProvider) => {
"ngInject";
$stateProvider
.state('about', {
url: '/about',
template: '<about></about>'
});
}).name;
Разбивать структуру на common и components — плохое решение (уже проходили).
разбитую по бизнес-логике, а не синтетически
Таким образом в user могут быть login и register
продакшеном тут и не пахнет.
Уверен что большинство темплейтов появились не из пустого место
Или эта идея звучит бредово?«repeat password» или «view password»… В моем случае директива поля ввода пароля с глазиком лежит в common/components/form/password как элемент абстрактной формы. Ничего бредового.
Инкрементные билды в плане...В Вебпаке легко разбить билд на файлы и добавить хеш к имени, но при ограничении количества бандлов будет склеивать друг с другом наиболее мелкие, что негативно скажется на кешировании (редко меняющиеся зависимости могут оказаться в одном файле с часто меняющимися). Описывать структуру бандлов в конфиге, даже для среднего проекта с парой сотен зависимостей, чересчур. От ленивой загрузки так же придется отказаться. Во-первых, она не поддерживается Ангуляром (без костылей), во-вторых, на практике, даже в огромном проекте из нескольких разделов больше половины кода грузится сразу и остается 10-20 кусков-разделов, подгружаемые лениво, общий вес которых таков, что проще сразу загрузить и не морочить голову. Возможно, плохо читал документацию, но простого решения этой задачи Вебпаком не нашел.
Я же например планирую переделать все это так:Пометил вещи, которых не должно быть в объявлении компонента:
import angular from 'angular';
import uiRouter from 'angular-ui-router'; //Зачем глобальные зависимости в каждом компоненте?
export default angular
.module('about', [ //В крайнем случае включить uiRouter, ngResource и проч. в lib
uiRouter //и подключать везде его,
]) //но и это попахивает костылем
.config(($stateProvider) => {
"ngInject"; //Лишнее
$stateProvider
.state('about', {
url: '/about',
template: '<about></about>'
});
}).name; //Зачем разработчику помнить, что нужно всегда экспортировать name?
на днях нашел время добавить ng-annotateОбязательно сделайте пример с одновременным использованием angular-bootstrap и angular-strap. У них пересекается сервис $tooltip и их совместное подключение разруливается исключительно ng-annotate.
Зачем глобальные зависимости в каждом компоненте?
//Лишнее
//Зачем разработчику помнить, что нужно всегда экспортировать name?
ES6-7 Babel, CoffeeScript, TypeScript, Native JSПроблемы есть у всех вышеперечесленных, ES6 Babel — браузеры ещё не поддерживают ES6 (ES7) полностью, поэтому его придется компиллировать в ES5 ещё долгое время для всех браузеров, а Babel дает не «лучший» код (хотя он имеет ряд опций для этого), но для написания веб-приложений это не важно, это может быть важно при написании критичных к скорости участков, Babel можно смело пробовать для приложений.
Что касается Babel, ES6 и т. п. то действительно считаю баловством использование в продакшене языков не поддерживаемых основными браузерами. Изучать новые технологии нужно, но бежать впереди поезда не слишком эффективно.
Пользователю предлагается оптимальная структура проекта и оптимальный с точки зрения быстродействия результат сборки.
Если webpack или другая технология подойдёт лучше gulp в качестве основы
вы сможете объяснить как её настроить подобным образом
использование в продакшене языков не поддерживаемых основными браузерами
В нашем случае это ограничения, накладываемые на структуру проекта
Сборщик проектов на Angular и RequireJS и некоторые мысли по сборке