Вычитка CSS для обеспечения качества и согласованности
Мое путешествие
Я впервые узнал о Stylelint, просматривая документацию по стилизованным компонентам. Я специально не искал этого, но, поскольку я только что установил ESLint и Prettier в своей кодовой базе, я был заинтригован. С этого момента я начал исследовать Stylelint. Довольно скоро я понял, что, хотя у меня была окончательная настройка линтинга Javascript через ESLint и Prettier, у меня не было абсолютно ничего для CSS. Было ясно, что это моя следующая задача.
Stylelint
Stylelint - это линтер CSS. Он работает, анализируя ваш CSS и предупреждая вас, если какие-либо настроенные правила нарушаются. Эти правила могут обнаруживать ошибки CSS и обеспечивать соблюдение соглашений о стилях. Это похоже на проверку орфографии и грамматики в Google Документах или Microsoft Word - по сути, это автоматический корректор для вашего CSS!
Конфигурация
Stylelint запускает файл конфигурации с именем stylelint.config.js. Этот файл конфигурации разбит на правила, плагины и расширения.
Правила
Правила определяют, что Stylelint будет искать в вашем коде. Они определены в rules разделе конфигурации как пары ключ-значение. Ключ - это правило, а значение переключает правило и устанавливает параметры.
Включение правила зависит от самого правила - для некоторых правил это может быть так же просто, как установка значения true; другие имеют возможность настраиваться напрямую с помощью ключевого слова.
// stylelint.config.js
module.exports = {
rules: {
'declaration-no-important': true,
'color-hex-case': 'upper',
},
};
Некоторые правила также позволяют настраивать его еще больше с помощью дополнительных параметров конфигурации. В этом случае основной вариант и дополнительные конфигурации представляют собой массив.
module.exports = {
rules: {
'font-weight-notation': ['numeric', { ignore: ['relative'] }],
},
};
Отключить намного проще - просто установите значение null.
module.exports = {
rules: {
'comment-no-empty': null,
},
};
Плагины
Stylelint изначально предоставляет почти 200 правил, но эти правила не охватывают все. Здесь на помощь приходят плагины - они позволяют разработчикам создавать правила, которые затем можно включить в своей конфигурации. Вот несколько примеров плагинов Stylelint.
Для интеграции определите эти плагины в разделе plugins конфигурации. Затем вы можете использовать правила плагина в разделе rules.
module.exports = {
plugins: [
'stylelint-a11y',
],
rules: {
"a11y/no-outline-none": true,
},
};
Расширения
Благодаря такому количеству собственных правил и плагинов, создающих еще больше правил, расширения Stylelint делают их более удобными, поэтому вам не нужно выдергивать волосы, пытаясь понять их все. Через расширения вы наследуете плагины и правила, поэтому вам не придется делать это самостоятельно. Вот несколько примеров расширений Stylelint.
stylelint-config-standard
Рекомендуемая конфигурация Stylelint от создателей Stylelint www.npmjs.com
Расширения определены в разделе extensions файла config.
module.exports = {
extends: [
'stylelint-config-standard',
'stylelint-config-recommended-scss',
'stylelint-a11y/recommended',
],
};
Переопределение + отключение
Но использование расширений дает побочный эффект - что, если вы в основном согласны с ними, но есть несколько правил, которые вы хотели бы изменить или полностью отключить? Здесь на помощь приходит переопределение и отключение. Ваши собственные правила будут иметь приоритет и переопределить правила расширения.
module.exports = {
extends: [
'stylelint-config-standard',
],
rules: {
'color-hex-case': 'upper',
'length-zero-no-unit': null,
},
};
Даже если вы изо всех сил стараетесь придерживаться правила, могут быть случаи, когда правило должно быть нарушено. Чтобы не допустить ошибок Stylelint, вы можете временно отключить Stylelint для определенных строк с комментариями.
/* stylelint-disable */: отключает Stylelint для всех строк ниже, пока не будет повторно включен с помощью/* stylelint-enable *//* stylelint-disable-line */: отключает Stylelint только для текущей строки/* stylelint-disable-next-line */: отключает Stylelint только для следующей строки
Вы также можете указать конкретные (разделенные запятыми) правила после комментария отключения, чтобы отключить несколько правил вместо отключения всех.
div {
/* stylelint-disable-next-line value-no-vendor-prefix */
display: -webkit-flex;
justify-content: center;
align-items: center;
font-size: 12px !important; /* stylelint-disable-line declaration-no-important */
/* stylelint-disable */
:focus {
outline: none;
}
/* stylelint-enable */
}
Их следует использовать с осторожностью, поэтому, если вы постоянно отключаете эти правила, подумайте об их отключении навсегда,
CSS в JS
Если вы используете популярные CSS-фреймворки в JS-фреймворках, такие как Emotion или Styled Components, вы все равно сможете использовать линтинг CSS после небольшой дополнительной настройки. Процессор stylelint-processor-styled-components извлечет стили из компонентов Emotion или Styled Components, чтобы Stylelint мог их использовать. Кроме того, некоторые правила несовместимы с этими фреймворками, поэтому их необходимо отключить с помощью stylelint-config-styled-components.
module.exports = {
extends: ['stylelint-config-styled-components'],
processors: ['stylelint-processor-styled-components'],
};
Несколько конфигураций
Если вы используете несколько фреймворков CSS, вам может потребоваться несколько конфигураций, каждая из которых нацелена на конкретный фреймворк. Например, если вы используете стандартные CSS и стилизованные компоненты, вам потребуется конфигурация для каждого из них из-за различий между двумя конфигурациями.
// stylelint.config.js
module.exports = {
extends: [
'stylelint-config-standard',
'stylelint-a11y/recommended'
],
};
// stylelint.styled.config.js
module.exports = {
extends: [
'./stylelint.config.js',
'stylelint-config-styled-components'
],
processors: ['stylelint-processor-styled-components'],
};
Подсказка: ваши конфигурации могут дополнять друг друга, поэтому вам не нужно снова определять одни и те же правила, расширения плагинов!
Бег
Чтобы запустить Stylelint (с несколькими конфигурациями), я добавляю следующие псевдонимы к package.json.
{
"scripts": {
"lint:js": "stylelint '{**/*,*}.js' --config stylelint.styled.config.js",
"lint:css": "stylelint '{**/*,*}.css'",
"lint:css:fix": "stylelint '{**/*,*}.css' --fix"
},
}
npm run lint:js будет запускать Stylelint на стилизованных компонентах (файлы с расширением .js), а npm run lint:css будет запускать Stylelint на ванильном CSS (файлы с расширением .css). Вдобавок Stylelint поддерживает автоматическое исправление, поэтому вы можете запускать npm run lint:css:fix, и любые нарушения Stylelint, которые могут быть автоматически исправлены, будут. К сожалению, автоматическое исправление не поддерживается, если вы используете процессоры, которые требуются для стилизованных компонентов.
Последние мысли
Stylelint - прекрасное дополнение к ESLint для обеспечения и поддержки высококачественного кода. Хотя Stylelint немного сложно настроить на начальном этапе, когда это будет сделано, вы можете быть уверены в качестве и согласованности вашего CSS. Вам просто нужно меньше беспокоиться о том, чтобы сосредоточиться на создании отличного продукта.