Как стать автором
Обновить

Устанавливаем Stylelint во Vue-проект

Когда я решил махом прикрутить stylelint в пару к eslint в своей кастомной конфигурации Vue 3/Sass/Webpack 5, то обнаружил, что сделать это не так просто. Сначала stylelint вообще не понимал, как работать с однофайловыми компонентами Vue. Затем перестал парсить простые .scss-файлы.

У хваленой документации stylelint готового рецепта не оказалось, а гугл засыпает разрозненными Q&A-страницами, где в лучшем случае находилось решение только какой-то конкретной задачи. Это побудило меня написать свой рецепт.

Возможно, тебе будет проще и быстрее посмотреть готовый код обсуждаемой здесь конфигурации.

Ставим пакеты

Сначала поставим в проект все нужные пакеты:

npm install –save-dev stylelint stylelint-config-standard-scss stylelint-webpack-plugin @mapbox/stylelint-processor-arbitrary-tags

По порядку:

stylelint — сам линтер стилей. Он работает через cli, поэтому можешь проверить все файлы с помощью команды: npx stylelint “**/*.scss”;

stylelint-config-standard-scss — конфигурация с правилами для препроцессора sass (с scss-синтаксимом). Если используешь другой препроцессор или чистый css — гляди нужную конфигурацию для установки тут;

stylelint-webpack-plugin — нужен для линтинга стилей при сборке проекта вебпаком. Webpack выведет ошибки в консоль и в браузер, если запустить сборку на dev-server’е;

@mapbox/stylelint-processor-arbitrary-tags — позволяет stylelint’у читать однофайловые компоненты, находя в них предварительно теги <style></style>, где и должны находиться стили.

Конфигурируем stylelint

В корне проекта создай файл: “.stylelintrc.json” и скопируй в него конфигурацию:

module.exports = {
	processors: [
		[
    	'@mapbox/stylelint-processor-arbitrary-tags',
			{
				fileFilterRegex: [/\.vue$/],
			},
		],
	],
	extends: 'stylelint-config-standard-scss',
	rules: {
		'no-empty-first-line': null,
		'no-empty-source': null,
	},
};

В массиве “processors” мы передаём установленный ранее процессор, который ищет в файлах теги <style></style> (но можно поменять регулярное выражение для поиска, читай тут). Через “fileFilterRegex” передаём процессору регулярное выражение с перечнем расширений файлов, для которых нужно применять данный процессор (в нашем случае это .vue-файлы). Если не указать эту опцию, процессор будет парсить и стандартные .css/.scss файлы. Он не найдет там искомые теги<style></style> и выдаст ошибку “no-empty-source”.

В свойство “extends” передаём конфигурацию с правилами для scss. А в “rules” отдаём объект с настройкой правил (полный их список тут). В нашем случае нужно отключить правило “no-empty-first-line” (процессор строчку с тегом <style> считает за первую, не видит в ней определения стилей и выдаёт ошибку) и уже знакомое правило “no-empty-source” (т.к. некоторые .vue-файлы могут не содержать стилей в принципе).

Конфигурируем Webpack

Вверху “webpack.config.js” импортируй установленный ранее плагин:

const StyleLintPlugin = require('stylelint-webpack-plugin');

Затем, в массиве “plugins” определи сам плагин и укажи формат файлов, которые stylelint’у нужно читать при сборке (в нашем случае это файлы с расширением .vue и .scss):

plugins: [
	//...
  new StyleLintPlugin({
  	files: [path.resolve(__dirname, 'src/**/*.{vue,scss}')]
  }),
  //...
]

Теперь лови ошибки stylelint’а при сборке в консоли и в окне браузера при сборке проекта в режиме dev-server’а.

Устанавливаем и конфигурируем плагин stylelint в VSCode

Если ты пользуешься другим редактором, ищи инструкцию по установке тут.

Установи сам плагин из маркетплейса редактора по этой ссылке.

Затем — в самом редакторе — перейди в параметры (Файл -> Настройки -> Параметры), набери в поиске: “stylelint” и в блоке “stylelint: config” кликни “изменить в settings.json”. В файле перед закрывающий фигурной скобкой вставь следующие строки:

{
	//...
  "css.validate": false,
  "scss.validate": false,
  "stylelint.validate": ["scss", "vue"]
}

Мы просим VSCode отключить встроенные в редактор линтеры для CSS и препроцессора SCSS и делегируем проверку vue- и scss-файлов stylelint’у.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.