Светлое будущее гибридной разработки на JS для меня выглядит так:
TypeScript как язык (статический анализ это круто)
Redux and friends для управления состоянием (помойка документации, примеров, best-practice и инструментов разработчика). На нем пилим ядро бизнес-логики, framework-agnostic
React-native для мобильных устройств.
your-framework-of-choice для фронта, с поддержкой серверного рендеринга.
Есть пара сравнительно крупных проектов на Ionic 1, в каждом около ~20 cordova-плагинов, push-уведомления, universal links.
Впечатления плохие.
Во втором чуть получше — без digest-циклов, человеческий роутер, но все те же лагающие события, запинающиеся анимации.
Писать на cordova новый проект не хочется, это постоянная боль.
У RN свои приколы, конечно, но с ними можно мириться, в конце концов переписать лагающие компоненты на натив.
К пункту 4:
file-loader позволяет передать свой собственный publicPath через параметры, отличный от того, что в output. Таким образом можно все картинки в production-режиме закинуть на отдельный сервер.
Более того, в качестве publicPath можно даже функцию передать, чтобы динамически url генерить.
Отсюда совет — читайте исходники лоадеров, в них много всего интересного.
Жаль, что не рассказали относительно того, как именно вы версионируете API на уровне кода.
Под каждую версию API держите свою ветку?
Или поддерживаете все версии внутри одной кодовой базы?
Какая у вас основная специфика работы? Frontend / backend? Как долго вы с Ангуляром знакомы? Судя по вашим эмоциям относительно Ангуляр 2 вы с первым не работали.
Расскажите лучше, как собирать пакет с приложением, использующим нативные плагины.
Делал утилиту для просмотра точек на карте Google Maps, точки грузил из SQLite. Для SQLite расширение собирается через node-gyp, вот я, помню, попрыгал. Слава богу нужно было только под одну платформу.
Еще интересный вопрос — есть у вас 10 вендорных библиотек. В каждой по css-файлу. В каждом css-файле ссылки на изображения и шрифты. Где-то шрифты лежат в ../fonts, где-то в ./fonts, где-то прямо в ./, то же самое с картинками.
Как будете собирать весь вендорный css в один файл, чтобы пути не поломать?
Ок, а что будет происходить, если вы файл удалили? Сначала собрали с ним, потом решили переименовать. Или совсем он вам не нужен. Что будет в этом случае?
gulp.watch при изменении любого файла будет полностью пересобирать скрипты. При 2-х файлах это нормально. А если файлов 100? А если каждый из них прогоняется через babel? Инкрементальная сборка маст хев.
livereload стили применяет также с перезагрузкой страницы? Применение новых стилей без перезагрузки страницы маст хев.
И да, пересаживайтесь на webpack (говорю, как человек, который долгое время сидел на gulp)
По функциональному программированию в целом на Coursera есть прекрасный курс Programming Languages.
Его огромное преимущество в том, что он не учит какому-то конкретному языку, а в большей степени посвящен концепциям (иммутабельность, pattern matching, каррирование и.т.д) функциональных языков и почему это хорошо.
В качестве основного языка там используется ML, полученный опыт легко переносится на любой функциональный язык.
К сожалению свежих сессий не предвидится, но я нашел канал на ютубе, где выложены все лекции. www.youtube.com/channel/UCzMlECXd856E028HnSYExOQ
Также на github можно легко найти репозиторий с домашними заданиями.
Модели ($scope) в AngularJS работают через dirty-checking. Это одна из причин, почему его так любят лишний раз пнуть.
В Angular2 будет поддержка реактивности и иммутабельных данных.
export default class MyController extends NgController {
/** @ngInject */ constructor($scope, $injector) {
super($scope, $injector);
var [MyService1, MyService2] = this.di('MyService1', 'MyService2');
MyService1.doSomething();
var data = this.resolve('preloaded'); // Вытаскивает данные resolve-секции роутов. Использую ui.router
}
}
Все-таки основное преимущество классов в ES6 это как раз наследование без костылей, не использовать его как минимум странно.
Именно поэтому сервисы я не стал делать классами — попробовал, да мороки больше, не возникало кейсов, где их надо наследовать.
P.S. Ну и ngAnnotate наше все, прекрасно работает с /** @ngInject */ constructor() {}
Версия с поддержкой ngModel. Писал навскидку, мог где-то ошибиться.
Также поддержка интерполяции внутри атрибута и сохранение в куку, только если введенный текст — email.
(function() {
var app = angular.module('habr-demo-app', []);
app.directive('habrRememberInCookie', habrRememberInCookie);
function habrRememberInCookie($interpolate) {
function link(scope, element, attrs, ngModel) {
var cookieName = $interpolate(attrs.habrRememberInCookie)($scope);
if(ngModel) {
if(!ngModel.$viewValue) {
ngModel.$setViewValue($.cookie(cookieName));
}
ngModel.$viewChangeListeners.push(function(value) {
if(!ngModel.$error.email){
setCookieValue(value);
}
});
return;
}
if(!element.val()) {
var savedValue = $.cookie(cookieName);
element.val(savedValue);
}
element.on('change', function(event) {
var newValue = element.val();
setCookieValue(newValue);
});
function setCookieValue(value) {
$.cookie(cookieName, value, {expires: 360});
}
}
return {
restrict: 'A',
require: '?ngModel',
link: link
};
}
})();
Светлое будущее гибридной разработки на JS для меня выглядит так:
Есть пара сравнительно крупных проектов на Ionic 1, в каждом около ~20 cordova-плагинов, push-уведомления, universal links.
Впечатления плохие.
Во втором чуть получше — без digest-циклов, человеческий роутер, но все те же лагающие события, запинающиеся анимации.
Писать на cordova новый проект не хочется, это постоянная боль.
У RN свои приколы, конечно, но с ними можно мириться, в конце концов переписать лагающие компоненты на натив.
file-loader позволяет передать свой собственный publicPath через параметры, отличный от того, что в output. Таким образом можно все картинки в production-режиме закинуть на отдельный сервер.
Более того, в качестве publicPath можно даже функцию передать, чтобы динамически url генерить.
Отсюда совет — читайте исходники лоадеров, в них много всего интересного.
Под каждую версию API держите свою ветку?
Или поддерживаете все версии внутри одной кодовой базы?
Делал утилиту для просмотра точек на карте Google Maps, точки грузил из SQLite. Для SQLite расширение собирается через node-gyp, вот я, помню, попрыгал. Слава богу нужно было только под одну платформу.
Как будете собирать весь вендорный css в один файл, чтобы пути не поломать?
livereload стили применяет также с перезагрузкой страницы? Применение новых стилей без перезагрузки страницы маст хев.
И да, пересаживайтесь на webpack (говорю, как человек, который долгое время сидел на gulp)
Его огромное преимущество в том, что он не учит какому-то конкретному языку, а в большей степени посвящен концепциям (иммутабельность, pattern matching, каррирование и.т.д) функциональных языков и почему это хорошо.
В качестве основного языка там используется ML, полученный опыт легко переносится на любой функциональный язык.
К сожалению свежих сессий не предвидится, но я нашел канал на ютубе, где выложены все лекции. www.youtube.com/channel/UCzMlECXd856E028HnSYExOQ
Также на github можно легко найти репозиторий с домашними заданиями.
В Angular2 будет поддержка реактивности и иммутабельных данных.
Использую так:
Все-таки основное преимущество классов в ES6 это как раз наследование без костылей, не использовать его как минимум странно.
Именно поэтому сервисы я не стал делать классами — попробовал, да мороки больше, не возникало кейсов, где их надо наследовать.
P.S. Ну и ngAnnotate наше все, прекрасно работает с /** @ngInject */ constructor() {}
Это BaaS обычный.
Также поддержка интерполяции внутри атрибута и сохранение в куку, только если введенный текст — email.