Эта статья предназначена только для технической проверки, записи, общения и ни на кого не направлена. Прости за любую обиду. Эта статья была впервые опубликована по адресу https://vsnail.cn/static/doc/blog/eslintPrettier.html.
На самом деле, я давно хотел использовать его в технике.eslint
а такжеprettier
для стандартизации кода. Ноeslint
а такжеprettier
любить и убивать друг друга, плюс кадр(vue
,react
) уникален для письма (jsx
,template
) и так далее всегда делают процесс разработки очень болезненным, запутанным и перегруженным. так что включай каждый разesint
, затем отключите, включите, отключите и так далее, снова и снова.
Некоторое время назад я просматривал материалы, связанные с фронтенд-инжинирингом, и обнаружил, что спецификация формата инженерного кода является одной из важных ссылок. Гу Эр, хорошенько взгляни на выходныеeslint
а такжеprettier
, для достижения эффективной и стандартизированной разработки.
На пути к спецификации кода наша конечная цель состоит в том, чтобы:
Все разработчики в команде используют набор правил спецификации кода, и нам не нужно прилагать слишком много усилий к форматированию ради форматирования. Я надеюсь, что есть набор автоматизированных инструментов, которые помогут нам определить, стандартизирован ли код.Если он не стандартизирован, он может автоматически помочь нам отформатировать его в соответствии с установленными спецификациями.
через паруeslint
а такжеprettier
Общее понимание , на самом деле, можно найти, чтоprettier
используется для форматирования кода. Пока правила спецификации кода установлены и код наwarn
,error
дождаться напоминания,eslint
быть реализованным. Поэтому нашей большой целью должно бытьeslint
, затем поставьтеprettier
интегрированный.
ESLint
ESLint
является открытым исходным кодомJavaScript
Инструмент проверки кода, созданный Николасом С. Закасом в июне 2013 года. Инспекция кода — это статический анализ, который часто используется для поиска проблемных шаблонов или кода и не привязан к определенному стилю кодирования. Проверка кода доступна для большинства языков программирования, и обычно компиляторы имеют встроенные инструменты проверки.
ESLint
Все правила разработаны так, чтобы их можно было подключать.ESLint
Правила по умолчанию ничем не отличаются от других плагинов, и сами правила и тесты могут зависеть от одного и того же шаблона.
Так что настраиваемый, подключаемыйESLint
Самая большая особенность этого также является причиной, по которой мы стремимся использовать его.
Как настроить
настроитьESLint
Есть два способа:
- использовать
JavaScript
Комментарии встраивают информацию о конфигурации непосредственно в исходный файл кода. - профилированный
Среди этих двух методов «файл конфигурации» является наиболее распространенным методом настройки. использоватьJavaScript
,JSON
илиYAML
Файл определяет информацию о конфигурации для всего каталога (обрабатывающего ваш домашний каталог) и его подкаталогов.ESLint
Они просматриваются и считываются автоматически, и вы можете указать произвольный файл конфигурации при запуске из командной строки.
ESLint
Поддерживаются несколько форматов конфигурационных файлов:
-
JavaScript
- использовать.eslintrc.js
Затем выведите объект конфигурации. -
YAML
- использовать.eslintrc.yaml
или.eslintrc.yml
Определите конфигурацию конфигурации. -
JSON
- использовать.eslintrc.json
определить структуру конфигурации,ESLint
изJSON
файл разрешенJavaScript
примечания к стилю. - (устарело) - использовать
.eslintrc
,Может сделатьJSON
Это также может быть YAML. -
package.json
- существуетpackage.json
создатьeslintConfig
properties, определите свою конфигурацию там.
Если в одном каталоге несколько файлов конфигурации,ESLint
Будет использоваться только один. Порядок приоритета следующий:
.eslintrc.js
.eslintrc.yaml
.eslintrc.yml
.eslintrc.json
.eslintrc
package.json
Поскольку логика легко пишется на js, а ее приоритет относительно высок, в качестве файла конфигурации рекомендуется использовать js-файл.
Что означают эти конфиги?
Настраиваемый даESLint
одна из характеристик. Это означает, что мы должны понимать, что означает каждый элемент конфигурации, чтобы игратьESLint
. Итак, давайте посмотрим, что означают общие элементы конфигурации.
Parser
ESLint
По умолчанию в качестве парсера используется Espree, вы можете указать другой парсер в файле конфигурации.
Следующий парсер работает сESLint
совместимый:
- Esprima
- Babel-ESLint — оболочка парсера Babel, позволяющая ему работать с
ESLint
совместимый. - typescript-eslint-parser (экспериментальный) — синтаксический анализатор, который преобразует TypeScript в формат, совместимый с ESTree, чтобы его можно было использовать в
ESLint
используется в. Цель этого - пройтиESLint
для разбора файлов TypeScript (хотя и не обязательно через всеESLint
правило). Обратите внимание, что при использовании пользовательского парсера, чтобы позволитьESLint
работа с не-ECMAScript 5
Нормальная работа, свойства конфигурацииparserOptions
Все еще обязательно. Парсер будет передан вparserOptions
, но не обязательно использовать их для определения переключателей функций.
parserOptions
Это свойство часто используется для установки некоторой конфигурации парсера. Доступные варианты:
-
-
ecmaVersion
: сформулироватьECMAScript
версия.
-
Настройка по умолчанию составляет 3,5 (по умолчанию), вы можете использовать 6,7,8 или 9, чтобы указать, что вы хотите использоватьECMAScript
Версия. Вы также можете указать 2015 (те же 6), 2016 (то же 7), 2017 (то же 9) или 2018 (то же 9) (то же 9)
-
-
sourceType
: Тип источника
-
Установить как "script
" (по умолчанию) или "module
"(если ваш кодECMAScript
модуль).
-
-
ecmaFeatures
: Это объект, представляющий дополнительные языковые функции, которые вы хотите использовать:
-
-
3.1
globalReturn
- Разрешить использование в глобальном масштабеreturn
утверждение -
3.2
impliedStrict
- Включить глобальный строгий режим (еслиecmaVersion
5 и выше) -
3.3
jsx
- включитьJSX
-
3.4
experimentalObjectRestSpread
- включить экспериментальныйobject rest
/spread properties
служба поддержки. (Важно: это экспериментальная функция, в будущем в правила могут быть внесены существенные изменения, рекомендуется написать, что вы не полагаетесь на эту функцию, за исключением случаев, когда она изменяется, вы готовы нести расходы на обслуживание.)
Настройка параметров парсера может помочь
ESLint
Определите, что является ошибкой синтаксического анализа, все языковые параметры по умолчаниюfalse
Environments
Это свойство конфигурации определяет набор предопределенных глобальных переменных. Доступные среды включают:
-
browser
- Глобальные переменные в среде браузера. -
node
-Node.js
глобальные переменные иNode.js
объем. -
commonjs
-CommonJS
глобальные переменные иCommonJS
Область (дляBrowserify/WebPack
упакованный код, который работает только в браузере). -
shared-node-browser
-Node.js
а такжеBrowser
Общая глобальная переменная. -
es6
- включить кромеmodules
Все кромеECMAScript 6
Свойства (этот параметр устанавливается автоматическиecmaVersion
Параметр парсера 6). -
worker
-Web Workers
глобальные переменные. -
amd
- Будуrequire()
а такжеdefine()
определяется какamd
та самая глобальная переменная. -
mocha
- Добавить всеMocha
Протестируйте глобальные переменные. -
jasmine
- добавить всеJasmine
Тестовые глобалы для версий 1.3 и 2.0. -
jest
-Jest
глобальные переменные. -
phantomjs
-PhantomJS
глобальные переменные. -
protractor
-Protractor
глобальные переменные. -
qunit
-QUnit
глобальные переменные. -
jquery
-jQuery
глобальные переменные. -
prototypejs
-Prototype.js
глобальные переменные. -
shelljs
-ShellJS
глобальные переменные. -
meteor
-Meteor
глобальные переменные. -
mongo
-MongoDB
глобальные переменные. -
applescript
-AppleScript
глобальные переменные. -
nashorn
-Java 8 Nashorn
глобальные переменные. -
serviceworker
-Service Worker
глобальные переменные. -
atomtest
-Atom
Протестируйте глобальные переменные. -
embertest
-Ember
Протестируйте глобальные переменные. -
webextensions
-WebExtensions
глобальные переменные. -
greasemonkey
-GreaseMonkey
глобальные переменные. Эти среды не являются взаимоисключающими, поэтому вы можете определить несколько одновременно.
Globals
Когда мы используем глобальные переменные, предоставленные третьими лицами (например:jQuery
,AMap
так далее.),ESLint
Он их не распознает и всегда выдает ошибку. В это время появляется роль конфигурации. использоватьglobals
Укажите глобальную переменную, которую вы хотите использовать. установить переменную вtrue
Будут ли переписаны допустимые переменные илиfalse
Не будет позволено быть переопределенным.
Plugins
ESLint
Поддерживает использование сторонних плагинов. Прежде чем использовать плагин, вы должны установить его с помощью менеджера пакетов.
При настройке плагина в конфигурационном файле можно использоватьplugins
ключевое слово для хранения списка имен плагинов. Название плагина можно не указыватьeslint-plugin-
приставка.
Rules
ESLint
Поставляется с тоннами правил. Вы можете использовать аннотации или файлы конфигурации для изменения правил, которые будут использоваться в вашем проекте. Чтобы изменить параметр правила, вы должны установить для идентификатора правила значениеoff
,warn
,error
один из трех.
унаследованный файл конфигурации
Основные используемые свойства конфигурации были рассмотрены выше. Но мы сказали раньшеESLint
Не только настраиваемость, но и подключаемость плагина. Так как же работают плагины? Плагины — это не что иное, как расширение определенных функций и предоставление интерфейсов для внешнего мира. существуетESLint
В , плагины обычно предоставляют определенные функции внешнему миру посредством наследования.
extends
Файл конфигурации может наследовать включенные правила из базовой конфигурации.
extends
Значения свойств могут быть:
(1), строка, указанная в конфигурации
(2), массив строк: каждая конфигурация наследует предыдущую конфигурацию
ESLint
Расширяйте конфигурацию рекурсивно, чтобы базовая конфигурация также могла иметьextends
Атрибуты.
extends
Он может вводить общие пакеты конфигурации и плагины.
- Общий пакет конфигурации
Совместно используемая конфигурация — этоnpm
package, который выводит объект конфигурации.
extends
Значения свойств могут не указывать префикс имени пакета eslint-config-.
- плагин
плагин этоnpm
package, который обычно выводит правила. Некоторые плагины также могут выводить одну или несколько именованных конфигураций.
plugins
Значение атрибута может не указывать префикс имени пакета.eslint-plugin-
.
extends
Значения свойств могут состоять из следующего:
(1),plugin
:
(2), имя пакета (префикс опускается, например,react
)
(3), /
(4), имя конфигурации (например,recommended
)
Prettier
Prettier
это инструмент форматирования кода. Возможность форматировать наш код в соответствии с нашими правилами.
Почему мы используем его вместо других инструментов форматирования кода? Prettier в основном имеет следующие преимущества:
- Настраиваемый
- Поддерживает несколько языков
- Интеграция с большинством редакторов
- Краткие элементы конфигурации
ESLint
+ Prettier
Все разработчики в команде используют набор правил спецификации кода, и нам не нужно прилагать слишком много усилий к форматированию ради форматирования. Я надеюсь, что есть набор автоматизированных инструментов, которые помогут нам определить, стандартизирован ли код.Если он не стандартизирован, он может автоматически помочь нам отформатировать его в соответствии с установленными спецификациями. ------ Наша конечная цель
Из приведенного выше понимания кажется, что для достижения нашей конечной цели нужно использовать эти два вместе. Так как же их интегрировать?
кvue
Пример проекта:
Шаг 1: Загрузите соответствующий пакет
Самое основное, обязательно хотим скачатьeslint
,prettier
эти два пакета.
Во-вторых, чтобы его интегрировать, нам нужен "общий пакет конфигурации" и написанные плагины. Итак, нам нужно скачатьeslint-plugin-prettier
,eslint-config-prettier
.
Опять же, нам нужно встать на плечи гигантов и увидеть мир. Другими словами, нам нужны более зрелые спецификации в отрасли, чтобы стандартизировать наш код. Таким образом, мы можем использовать плагин спецификации кода, предоставленный большой командой. Чем более известенairbnb
. Здесь мы выбираемairbnb-base
. Итак, нам нужно скачатьeslint-config-airbnb-base
.
И, наконец, за идеальное использование некоторых наших новых функций ES6. Нам нужно установить «лексер» наbabel-eslint
. Так что нам тоже нужно скачатьbabel-eslint
.
да мыvue
проект, то должен быть плагин для настройки vue, поэтому нам нужно скачатьeslint-plugin-vue
Резюме доступно, нам нужно скачать следующие пакеты
npm install esint prettier eslint-plugin-prettier eslint-config-prettier eslint-config-airbnb-base babel-eslint eslint-plugin-vue
Второй шаг — создать файл конфигурации
Если вы внимательно читали передeslint
элемент конфигурации, то этот шаг более механизирован. Поэтому я прямо скопирую файл конфигурации в проект и аннотирую его.
В корневом каталоге проекта создайте.eslintrc.js
файл, содержимое файла следующее:
module.exports = {
env: {
browser: true,
jquery: true, //由于项目中使用来jquery。。。其实不用引入jquery的,以后有机会去掉jquery后,请移除该配置。
},
parserOptions: {
parser: 'babel-eslint', //词法解析器使用babel-eslint,以更好的适配es6的新api
ecmaVersion: 6, //启用 ES6 语法支持;默认设置为3,5(默认), 你可以使用 6、7、8 或 9 来指定你想要使用的 ECMAScript 版本。你也可以用使用年份命名的版本号指定为 2015(同 6),2016(同 7),或 2017(同 8)或 2018(同 9)
sourceType: 'module', //设置为 "script" (默认) 或 "module"(如果你的代码是 ECMAScript 模块)。
},
extends: [
'airbnb-base',
'eslint:recommended',
'plugin:vue/essential',
'plugin:prettier/recommended',
],
plugins: ['vue', 'prettier'],
rules: {
'prettier/prettier': 'error',
'generator-star-spacing': 'off',
'import/no-named-as-default': 'off',
'import/no-named-as-default-member': 'off',
'no-unused-vars': [
'error',
{ vars: 'all', args: 'none', ignoreRestSiblings: false },
], //没有使用的参数,不会报错。因为个人觉的把可用的参数写上去 有利于以后的维护。
},
};
Инструменты разработки
Фактически на предыдущем шагеESlint
а такжеPrettier
Конфигурация завершена. Но чтобы иметь возможность автоматически форматировать, нам нужно сделать некоторую интеграцию.
Для достижения цели автоматического форматирования можно наделать шума в средстве разработки, а можноwebpack
Сделайте статью об этом. На самом деле, я предпочитаю реализовать автоматическое форматирование в средствах разработки, потому что оно кажется более быстрым.
В инструменте разработки мы хотим иметь возможность автоматически форматировать код после его изменения и сохранения. Как достичь этой цели? мы начинаем сVScode
Например
-
- Открыть
VScode
файл конфигурации
- Открыть
-
- Добавьте следующую конфигурацию.
...
"prettier.eslintIntegration": true,
"eslint.autoFixOnSave": true,
"editor.formatOnSave": true,
//配置 ESLint 检查的文件类型
"eslint.validate": ["javascript", "javascriptreact", "vue", "html"],
"eslint.options": {
"configFile": "./`.eslintrc`.js"
},
...
webpack
В дополнение к шуму вокруг инструментов разработки, вы также можете поднять шум вокруг инструментов упаковки и компиляции для достижения цели автоматического форматирования. мы начинаем сwebpack
Например:
потому чтоvue
В проектах обычно используются официально предоставленные строительные леса, поэтому здесь я прямо на картинке, а неBB
. (Вообще-то уже поздно, мне завтра на работу, а жена меня уже опять уговаривала)
постскриптум
На самом деле, с точки зрения спецификации кода, мы используемeslint
Есть много, много вещей, которые можно сделать.
Например, мы можем добавить скрипт для проверки нормальности кода.
мы также можемgit
Перед отправкой выполните автоматическое определение, чтобы избежать отправки неправильного кода в команду. могу одолжитьcode review
часть энергии, которая можетcode review
Основное внимание уделяется рациональности самой логики кода.
Ладно, спокойной ночи~