Рекомендации Frontend-разработчикам.
Менеджеры задач очень сильно облегчаются выполнение рутинной работы при создание проекта. Сейчас можно выделить два наиболее известных менеджера:
В новых проектах рекомендуется использовать Gulp, т.к. данный момент ведется активная разработка проекта, написано достаточное количество плагинов под задачи для популярных инструментов. Плюс сам процесс сборки проекта Gulp'ом примерно в 2,5 раза быстрее Grunt'a.
Шаблонизаторы — это именно то средство, которое предоставляет вам возможность написания разметки совершенно по новому, с целым рядом преимуществ по сравнению с обычным HTML.
Pug это вторая версия Jade, котрый изменил навазние из-за того что Jade является зарегистрированной торговой маркой. Так как проект новый, то остальные могут быть проблемы совместимости с другими инстументами и некоторым функционалом. На текущий момент в проектах рекомендуется использовать Jade, как более стабильную версию и поддерживаемую версию. В дальнейшем возможен переход на Pug.
В проектах рекомендуется использовать Stylus, как один самых развивающихся и гибких препроцессоров.
- End-to-end tests (Protractor)
- Unit tests (karma)
На текущий момент существует несколько высокоуровневых языков программирования, которые компилируются в JavaScript
В проектах рекомендуется использовать ECMAScript 6, как следующую версию стандарта JavaScript, поддержка которого обязательна для всех актуальных версий браузеров.
Для облегчение сборки всех этих замечательных инстументов в одном проекте можно использовать сервис yeoman. В качестве базового каркаса проекта с ангуляром можно воспльзоваться вот этим генератором Для статических сайтов подойдет generator-yeogurt
Это краткие рекомендации по написанию JS кода. Полный набор можно посмотреть тут AngularJS style guide.
- Везде (свойства и методы) используйте
camelCase
, за исключением:- В имена классов и конструкторов должен использоваться
PascalCase
- Константы должны быть все в UPPERCASE, например
var MY_CONSTANT = 0;
- В имена классов и конструкторов должен использоваться
- Имена файлов всегда должны быть в
kebab-case
(строчными словами, разделенными-
).
- Используйте одинарные ковычки
'
для строк - Поряд подключения зависимостей: от основных файлов (фреймоворки, внешние библиотеки) к более конкретным (модули проекта)
- Используйте префикс
_
для имен внутренних переменных - Всегда используйте строгие проверки равенства:
===
и!==
вместо==
or!=
чтобы избежать ошибок сравнения (смотрите JavaScipt equality table) - Используйте
[]
вместоArray
- В CSS все должно быть названо в
kebab-case
(строчными словами, разделенными-
). - Имена файлов всегда должны быть в
kebab-case
- Следуйте методологии BEM
- Используйте одинарные ковычки
'
для строк - Следите за областью видимости своих стилей:
- Разделяйте глобальные стили (например фреймворков) и стили модулей
- Глобальный стили должны быть расположены в
main/theme/*
илиmain/helpers.styl
(никогда в модулях) - Избегайте использования более общих селекторы, чем это необходимо (всегда использовать классы!)
- Никога не используйте слово
!important
. - Никогда не используйте inline стили в html, даже для отдадки (потому что когда нибудь это да окажется в вашем коммите)
- Не следует использовать префиксы для разных браузеров: с этим справится (autoprefixer)
- Все должно быть названо в
kebab-case
(строчными словами, разделенными-
): тэги, атрибуты, IDs, и т.д - Не нужно испозовать
data-
префикс для angular директив, не стесняйстесь использовать собственные элементы ((да, на данный момент это не будет совместимо с W3C валидатором )) - Имена файлов всегда должны быть в
kebab-case
- Используйте HTML5 doctype:
<!doctype html>
- Используйте HTML семантику в соответствии с ее назначением
- Используйте двойные кавычки
"
вокруг значений атрибутов - Используйте новую строку для каждого блока, списка или строки таблицы
- Разделяйте струтктуру (HTML) от презентации (CSS) и от поведения (JavaScript):
- Не используйте встроенные стили CSS или JavaScript
- атрибут
type
для stylesheets и script тэгов могут быть опущены - Используте валидный HTML по возможности
- Блочный тэги не могут быть вложены в inline тэги: например
<div>
не должен быть внутри<span>