lint-staged не работает на предварительной фиксации

prettier не работает в режиме предварительной фиксации. Это работало с той же конфигурацией в других проектах, поэтому я сбит с толку, почему на этот раз это не работает.

Это соответствующий раздел моего файла package.json:

"scripts": {
    "precommit": "lint-staged"
  },
"lint-staged": {
  "*.{js,json,css,scss,html,md}": [
    "prettier --write",
    "git add"
  ]
},

Редактировать. Вот соответствующие devDependencies:

"devDependencies": {
  "husky": "^0.14.3",
  "lint-staged": "^7.0.4",
  "prettier": "1.12.0"
},

person Andrew Horn    schedule 26.04.2018    source источник
comment
Конфигурация действительно должна быть другой, так как она не будет работать, но нам нужна дополнительная информация, чтобы помочь. У вас есть сообщения / журналы об ошибках? Правильно ли установлен prettier в текущем проекте? Вместо этого git add работает правильно?   -  person mpasko256    schedule 26.04.2018
comment
У вас установлена ​​лайка? github.com/typicode/husky Как насчет варианта 5? prettier.io/docs/en/precommit.html   -  person mpasko256    schedule 26.04.2018
comment
@ mpasko256 Да, лайка у меня установлена. Сообщения об ошибках не появляются. Prettier установлен правильно. Я вставлю соответствующий раздел devDependencies   -  person Andrew Horn    schedule 26.04.2018
comment
@ mpasko256 вариант 5 немного сбивает с толку ... Как мне заставить его работать с файлами, отличными от файлов js?   -  person Andrew Horn    schedule 26.04.2018
comment
Я хотел попробовать вариант 5 только в тестовых целях. Но чтобы вас не сбивало с толку: он просто запрашивает у git измененные файлы и сохраняет результат в переменной $ jsfiles. Вы можете просто заменить "*.js" "*.jsx" на "*.js" "*.json" "*.css" "*.scss" "*.html" "*.md", чтобы он работал в вашем примере.   -  person mpasko256    schedule 26.04.2018


Ответы (22)


В 2021 году

Иногда ловушки не добавляются с помощью husky, поэтому вам нужно добавить их с помощью простого простого взлома.

Вам необходимо сначала удалить хаски после этой установки V4 хаски, потому что это гарантирует, что ваши хуки установлены правильно, а после этого установите последнюю версию husky, чтобы вы могли получать последние обновления.

NPM

npm uninstall husky

npm install -D husky@4

npm install -D husky

ПРЯЖА

yarn remove husky

yarn add -D husky@4

yarn add -D husky

Если иногда описанный выше трюк не работает, давайте добавим крючок в хаски, указанный ниже метод используется только в V6, и я показываю husky с lint-staged примером.

NPM

npm install -D husky

npm set-script prepare "husky install" && npm run prepare

npx husky add .husky/pre-commit "npx lint-staged"

git commit -m "added husky and lint-stagged" // here you will notice the lint-staged checking the files with help of husky

ПРЯЖА

yarn add -D husky

npm set-script prepare "husky install" && yarn prepare

npx husky add .husky/pre-commit "yarn lint-staged"

git commit -m "added husky and lint-stagged" // here you will notice the lint-staged checking the files with help of husky
person Nisharg Shah    schedule 01.04.2021
comment
Как @Geoff упомянул в ответе ниже, хуки не устанавливаются автоматически с использованием husky@4, хуки предварительной фиксации работают. Это должен быть текущий принятый ответ - person rainversion_3; 16.05.2021

Проблема для меня заключалась в том, что я запускал npx mrm lint-staged, как говорится на официальном веб-сайте, но он установил только хаски и lint-staged конфигурации в package.json. Он не добавляет их как зависимости и не устанавливает.

Решение для меня было:

  1. npm i -D husky lint-staged

  2. npx mrm lint-staged

person Juanma Menendez    schedule 19.05.2019

Переустановил хаски и теперь вроде работает. Спасибо @ mpasko256 за помощь!

person Andrew Horn    schedule 26.04.2018

Для меня проблема была решена удалением и установкой более ранней версии

npm uninstall husky

npm install -D husky@4          //after this it will work
person Ankur Marwaha    schedule 02.03.2021
comment
Да, со мной случилось то же самое, и это решение работает. - person kevin; 10.06.2021

Вероятно, ваш пакет с хаски уже был в вашем node_modules до того, как вы настроили этот скрипт. Попробуйте переустановить хуки, можно запустить:

npm rebuild

Или, если вы используете пряжу:

npm rebuild --update-binary

Это решило мою проблему.

person Danna    schedule 24.03.2020
comment
Удивлен, увидев такой недавний ответ. Я думаю, что моя машина была в ужасе, и у меня была проблема с OP. Спасибо за ответ, похоже, это помогло мне. Спасибо! - person n8jadams; 24.03.2020
comment
Ага, у меня недавно возникла аналогичная проблема, спасибо вам тоже! - person Danna; 27.03.2020
comment
Спасибо. Rebuild пряжи не был обнаружен в моей системе, поэтому необходимо просто удалить пряжу хаски && добавить пряжу --dev хаски - person Liam Kernighan; 25.07.2020
comment
▶ yarn rebuild yarn run v1.3.2 (узел: 99635) [DEP0005] DeprecationWarning: Buffer () устарел из-за проблем с безопасностью и удобством использования. Используйте вместо них методы Buffer.alloc (), Buffer.allocUnsafe () или Buffer.from (). error Команда восстановления не найдена. - person jjalonso; 11.08.2020
comment
это устранило мою проблему - person Yohan Dahmani; 28.08.2020
comment
yarn rebuild не является командой (или, по крайней мере, больше не является). См .: github.com/yarnpkg/yarn/issues/2069 - person dspacejs; 04.03.2021

Вам не хватает зависимостей:

npm install --save-dev prettier husky lint-staged
person Mindaugas Jaraminas    schedule 05.06.2018
comment
Привет, я уже установил lint-staged и красивее, однако я не установил хаски, так как думал, что не использую его, так зачем устанавливать. Но я не уверен, что в тот момент, когда я только что установил хаски lint-staged, начал работать Спасибо. ! - person Rupesh Kumar Tiwari; 29.08.2018

Я пробовал здесь так много решений, но комбинация, наконец, сработала!

  1. Убедитесь, что установлен Husky v4. v6 у меня никогда не запускался.
  2. Проверьте вывод git config core.hooksPath. Это не должно ничего возвращать. Если это действительно работает,
git config --unset core.hookspath

И НАКОНЕЦ это сработало!

person Swaathi Kakarla    schedule 13.04.2021
comment
после такого большого решения это сработало! - person Yusuf; 12.05.2021
comment
Да, это работает. Я понизил версию с хаски 5 до 4. Но версия 4 не работала, хотя такая же установка работала в другом проекте. Это решение было недостающим шагом. - person spierala; 24.06.2021
comment
Финнали, спасибо, дружище! с хаски 4.3.8 - person ncesar; 03.07.2021

Для тех, кто сталкивается с этой проблемой и использует Husky 5, крючки не устанавливаются автоматически. Так что у вас, вероятно, просто нет необходимых хуков в вашем .git/hooks folder. Вам нужно либо добавить postinstall в свой package.json (рекомендуется), либо запустить npx husky install после того, как вы установили пакет с помощью npm.

введите описание изображения здесь

Или просто перейдите на Husky 4. Вам действительно придется это сделать, если, как и я, вы работаете над коммерческим проектом и не хотите быть спонсором Husky.

введите описание изображения здесь

https://dev.to/typicode/what-s-new-in-husky-5-32g5

person Geoff Davids    schedule 24.02.2021

Я думаю, что с вашим package.json что-то не так.

"scripts":{
   ...
},
"husky": {
    "hooks": {
        "pre-commit": "lint-staged",
        "pre-push": "npm test"
    }
},
"lint-staged": {
    "*.ts": ["tslint", "prettier --write", "git add"]
}

Кстати, после установки husky просто проверьте .git/hooks/pre-commit содержимое. Если в нем нет husky like слова, просто удалите файл .git/hooks/pre-commit и переустановите husky или запустите npx husky. Потому что husky пропустит изменение .git/hooks/pre-commit файла, если он не GHook или PreCommit одинаков.

Вы можете узнать это, перейдя по этой ссылке. https://github.com/typicode/husky/blob/master/src/installer/hooks.ts#L58

Альтернативный вариант - использовать pre-commit.

yarn add --dev pre-commit
"scripts":{
   ...
},
"pre-commit":"lint-staged",
...
person W.Perrin    schedule 09.04.2020

Это происходило со мной, и ни один из этих ответов не помог. Так что для справки в будущем это произошло потому, что я использовал npm@7, который выглядит так, будто он не знает, как правильно выполнить хаски.

Я узнал, что это проблема с хаски и npm, потому что я обнаружил, что у меня нет pre-commit файла в каталоге my-project/.git/hooks.

Когда вы устанавливаете хаски, он автоматически творит за вас свое волшебство в такой папке. Для этого мне пришлось:

  1. Перейти на npm i -g npm@6
  2. Убедитесь, что все было недавно переустановлено с помощью rm -rf node_modules package-lock.json && npm i (вы должны увидеть вывод Husky в консоли)
  3. И хотя это на самом деле не нужно, я снова выполнил npx mrm lint-staged

Наконец, это сработало.

person Frondor    schedule 25.10.2020
comment
Спасибо, что поделился. Мне помогли 2-й и 3-й этапы, и мне не нужно было понижать рейтинг NPM. - person Radovan Babjak; 25.02.2021

В случае, если это поможет кому-то другому: еще одна вещь, которую можно попробовать, - это удалить вашу node_modules папку и перезапустить npm install

Первоначально я запускал npm install в подсистеме linux на моем компьютере с Windows 10. При использовании git через bash все работало нормально. Я получил сообщение об ошибке после перехода на git в Powershell. Удаление и повторная установка более симпатичных, хаски и lint-staged у меня не сработали.

Я удалил папку node_modules и перезапустил npm install со стороны Windows, и теперь она работает.

person squillman    schedule 30.11.2018

В моем случае проблема заключалась в том, что были некоторые существующие хуки, и husky не отменяет их (подробнее здесь).

Просто поместите его сюда на случай, если кто-то еще столкнется с той же проблемой.

person Aanchal1103    schedule 17.05.2019
comment
Для меня это так. - person Aanchal1103; 25.11.2019

Потраченные часы на выяснение причины и использование вышеперечисленных решений

Прочтите документацию и избегайте поиска в Google: https://typicode.github.io/husky/#/?id=automatic-recommended

husky-init - это одноразовая команда для быстрой инициализации проекта с помощью хаски.

npx husky-init && npm install       # npm
npx husky-init && yarn              # Yarn 1
yarn dlx husky-init --yarn2 && yarn # Yarn 2
person Black Mamba    schedule 29.07.2021

У меня была такая же проблема, но я сделал эту ошибку.

Я добавил объект lint-staged внутри объекта husky, но позже понял, что мне нужно добавить lint-staged пары ключ-значение как прямые пары ключ-значение в package.json

"lint-staged": {
  "*.{js,json,css,scss,html,md}": [
    "prettier --write",
    "git add"
  ]
person madhu131313    schedule 16.01.2019

Обратите внимание на версию используемого узла. Husky требует node> = 10, а lint-staged требует node> = 10.13

person d_bhatnagar    schedule 07.03.2020

Команда git add больше не требуется в lint-stage v10 и новее. Он автоматически вставляется в коммит, как это описано в документации:

Начиная с версии 10.0.0, любые новые модификации исходно поставленных файлов будут автоматически добавляться в коммит. Если ваша задача ранее содержала шаг git add, удалите его. Автоматическое поведение обеспечивает меньшее количество состояний гонки, поскольку попытка одновременного выполнения нескольких операций git обычно приводит к ошибке.

https://github.com/okonet/lint-staged#configuration

person Luis Febro    schedule 12.02.2021

Убедитесь, что вы установили хаски

добавьте следующие скрипты в скрипт package.json

"prepare": "husky install && npx husky add .husky/pre-commit \"npm run lint-fix\"",
"lint": "eslint ./",
"lint-fix": "eslint ./ --fix"

ваши сценарии будут выглядеть примерно так

"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "prepare": "husky install && npx husky add .husky/pre-commit \"npm run lint-fix\"",
    "lint": "eslint ./",
    "lint-fix": "eslint ./ --fix",
    "format": "prettier --write \"**/*.{js,jsx,json,md}\""
  },

выполните следующую команду

npm run prepare 

этот сценарий создаст папку .husky в вашем рабочем каталоге и добавит в нее файл предварительной фиксации с помощью сценария npm run lint-fix.

поздравляю ... теперь вы можете зафиксировать свои файлы и увидеть, как предварительная фиксация проверяет вашу ошибку eslint, если таковая имеется

вы можете добавить строку ниже в свой файл игнорирования .git

/.husky
person Aravind Siruvuru    schedule 29.03.2021

Для пользователей Windows просто выполните в командной строке / bash следующее:

set HUSKY_DEBUG = 1

or

set HUSKY_DEBUG = true

Это решено, мои часы чесания головы.
См. также это

person Ayush Shankar    schedule 15.04.2021

Я решил свою проблему, добавив yarn в начале команд. (хаски v6)

.husky / перед фиксацией

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

yarn lint-staged

.husky / commit-msg

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

yarn commitlint -e $HUSKY_GIT_PARAMS
person Fatih Bulut    schedule 31.05.2021

Для меня проблема заключалась в том, что хук pre-commit не был исполняемым, что было легко исправить:

chmod +x .husky/pre-commit
person Tamlyn    schedule 11.06.2021

Критические изменения

Имейте в виду, что в версии 5x > были критические изменения.

Если вам не удается заставить его работать, вот как у меня Husky (v6) работает с lint-staged.

Предполагая, что он у вас уже установлен, в противном случае перейдите к шагу № 3.

1 - yarn remove husky

2 - yarn add -D husky

3 - husky install

4 - husky add .husky/pre-commit "pre-comit"

5 - chmod a+x .husky/pre-commit

6 - В package.json добавьте следующий скрипт "pre-commit": "lint-staged"

7 - Добавьте свою lint-staged конфигурацию, например

...
"lint-staged": {
    "src/**/*.{js,jsx,ts,tsx,json,css,scss,md}": [
      "prettier --write"
  ]
}
...
person Gilson Viana    schedule 21.06.2021

У меня такая же проблема по другой причине. Просто для HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor \ AutoRun установлено значение cd \ python. После удаления этого автозапуска lint-staged работает в режиме предварительной фиксации без каких-либо ошибок.

person Edward_GM    schedule 25.06.2021