ESLint с проблемами Prettier при глобальной установке Yarn

Я настраиваю среду ReactJS и слежу за курсом FrontendMasters по этой теме.

После глобальной установки eslint и prettier через Yarn автор запускает эту команду eslint js\**\*.{js,jsx}, и на своей машине все в порядке, но я получаю следующее:

Ой! Что-то пошло не так! :(

ESLint не смог найти плагин eslint-plugin-prettier. Это может произойти по нескольким причинам:

  1. Если ESLint установлен глобально, убедитесь, что eslint-plugin-prettier также установлен глобально. Глобально установленный ESLint не может найти локально установленный плагин.

  2. Если ESLint установлен локально, вероятно, плагин установлен неправильно. Попробуйте переустановить, выполнив следующее:

    npm я eslint-plugin-prettier @ latest --save-dev

Если вы все еще не можете решить проблему, остановитесь на https://gitter.im/eslint/eslint поболтать с командой.

Я попробовал Google, но не нашел ничего подходящего. Почему это происходит? Я использую Windows 10, использую последнюю версию Yarn (v0.24.6), и мой eslintrc.json выглядит так:

{
  "extends": ["airbnb", "prettier", "prettier/react"],
  "plugins": ["prettier"],
  "parserOptions": {
    "ecmaVersion": 2016,
    "sourceType": "module",
    "ecmaFeatures": {
      "jsx": true
    }
  },
  "env": {
    "es6": true,
    "browser": true,
    "node": true
  }
}

ОБНОВЛЕНИЕ

Я последовал приведенному ниже совету Daydream, хотя у меня не установлено nvm. Но я удалил папку node_modules, и после чата в Gitter от ESLint я удалил ESLint и Prettier глобально. Затем я сделал ESLint и Prettier devDependencies. Наконец, я выполнил команду yarn, чтобы все переустановить, и теперь получаю следующее:

Изображение

Примечание. Это проект с открытым исходным кодом, и если вы хочу убедиться в этом сам.


person J86    schedule 29.06.2017    source источник
comment
Я предполагаю, что вы намеревались пометить Yarn для диспетчера пакетов, а не YARN для проекта Apache?   -  person halfer    schedule 03.07.2017
comment
извини да @halfer   -  person J86    schedule 12.07.2017
comment
У меня такая же проблема после добавления .eslintrc.json, показанного на btholt.github.io/complete-intro-to-react-v4/eslint-prettier. Вы нашли решение?   -  person J Woodchuck    schedule 26.03.2019
comment
У меня нет, к сожалению :(   -  person J86    schedule 26.03.2019


Ответы (7)


Я сам столкнулся с той же проблемой. Похоже, это проблема с последней версией eslint, у меня была 4.2.0. Чтобы исправить это, я:

    run: Yarn remove eslint
or
    run: npm uninstall eslint

это удалит его локально, затем

    run: yarn add [email protected] 
or  run: npm install [email protected]

    run: eslint **/*.{js,jsx} --quiet

мои пути могут быть настроены по-другому, поэтому сделайте это вместе с ответом "Daydream Nation", и вы должны заставить его работать. Я не уверен, какую версию os eslint использует Брайан, и я уверен, что если вы откроете одно из его последних репозиториев, оно вам скажет, но, надеюсь, это направит вас в правильном направлении.

person mark-vb-austin    schedule 11.07.2017
comment
Я также должен упомянуть, что если вы воспроизводите видео Frontend Master ESLint, вы заметите, что у других людей такая же проблема, и вы заметите, что он также использует [email protected] - person mark-vb-austin; 11.07.2017
comment
Я использую 3.19.0, но по-прежнему получаю ту же проблему. И да, я заметил, что один парень рассказал ему о той же проблеме. - person J86; 12.07.2017
comment
Также попробовал изменить путь, как это было предложено @DaydreamNation, но все равно получил ту же ошибку о cannot find module eslint-config-prettier/react - person J86; 12.07.2017

Мне не хватало нескольких пакетов. Вот как я это исправил.

npm i eslint-config-prettier -save-dev
npm i eslint-config-standard -save-dev
npm i eslint-plugin-node -save-dev
npm i eslint-plugin-promise -save-dev

Вот мой package.json

{
  "name": "rpp-react",
  "private": true,
  "scripts": {
    "start": "meteor run"
  },
  "dependencies": {
    "babel-runtime": "^6.20.0",
    "meteor-node-stubs": "~0.2.4",
    "prop-types": "^15.5.10",
    "react": "^15.6.1",
    "react-addons-pure-render-mixin": "^15.6.0",
    "react-dom": "^15.6.1",
    "react-tap-event-plugin": "^2.0.1"
  },
  "devDependencies": {
    "babel-eslint": "^8.0.0",
    "eslint": "^4.7.2",
    "eslint-config-prettier": "^2.5.0",
    "eslint-config-standard": "^10.2.1",
    "eslint-plugin-flowtype": "^2.35.1",
    "eslint-plugin-import": "^2.7.0",
    "eslint-plugin-jsx-a11y": "^5.1.1",
    "eslint-plugin-node": "^5.1.1",
    "eslint-plugin-prettier": "^2.3.1",
    "eslint-plugin-promise": "^3.5.0",
    "eslint-plugin-react": "^7.3.0",
    "eslint-plugin-standard": "^3.0.1",
    "prettier": "^1.7.0"
  }
}

Вот мой .eslintrc.json

{
  "extends": [
    "standard",
    "plugin:flowtype/recommended",
    "plugin:react/recommended",
    "prettier",
    "prettier/flowtype",
    "prettier/react",
    "prettier/standard"
  ],
  "plugins": [
    "flowtype",
    "react",
    "prettier",
    "standard"
  ],
  "parserOptions": {
    "sourceType": "module",
    "ecmaFeatures": {
      "jsx": true
    }
  },
  "env": {
    "es6": true,
    "node": true
  },
  "rules": {
    "prettier/prettier": "error"
  }
}
person Jim Bockerstette    schedule 22.09.2017

Это УЖАСНЫЙ ХАК, но для меня это был ЕДИНСТВЕННЫЙ СПОСОБ ... решить эту проблему. Я использовал инструмент "strace", чтобы проверить, какие модули требуются, я скопировал эти файлы (пожалуйста, успокойтесь на этом шаге!), И это сработало :)

strace eslint --debug Person.js

Да ... вам нужно прокрутить несколько строк, пока не найдете что-то вроде этого:

stat ("/ usr / local / share / .config / yarn / global / node_modules / eslint / node_modules / eslint-plugin-prettier", 0x7fff5c139db0) = -1 ENOENT (Нет такого файла или каталога)

Вам нужно скопировать необходимые модули ... и он будет работать.

Это список модулей, которые мне пришлось скопировать вручную (внутри /usr/local/share/.config/yarn/global/node_modules/eslint/node_modules/)

eslint-config-airbnb
eslint-config-airbnb-base
eslint-plugin-import
eslint-plugin-jsx-a11y
eslint-plugin-prettier
eslint-plugin-prettier/node_modules/fast-diff
eslint-plugin-react

Прошу прощения за мой некрасивый английский, я учусь :)

person mzalazar    schedule 22.03.2018

Здесь вы установили зависимость разработки ESLint глобально:

sudo npm install --global eslint-plugin-react

И установите другие зависимости разработки в каталог проекта.

  • eslint-config-красивее
  • eslint-config-реагировать
  • eslint-plugin-красивее
  • eslint-plugin-реагировать

И ESLint не может найти эти другие зависимости разработки. Итак, вам необходимо установить все эти зависимости разработки глобально, чтобы решить эту проблему.

ИЛИ

Установите все эти зависимости разработки в каталог проекта и используйте команду:

~/<project_directory>/node_modules/.bin/eslint  **/*.{js,jsx} --quiet
person RaiBnod    schedule 23.02.2018

Я получил ту же ошибку ("не могу найти модуль eslint-config-prettier / react") при выполнении шаги из курса Frontend Masters, который вы упомянули, и смог решить эту проблему, установив eslint-config-prettier, как показано ниже, перед запуском скрипта lint:

npm install --save-dev eslint-config-prettier

или, если используется пряжа:

yarn add --dev eslint-config-prettier

Обратите внимание, что eslint-config-prettier «отключает все правила, которые не нужны или могут конфликтовать с prettier».

person J Woodchuck    schedule 26.03.2019

Я тоже прохожу курс, и первый совет, который я увидел в сети, заключался в том, чтобы указать прямой путь к eslint через установку yarn в node_modules:

./node_modules/.bin/eslint **/*.{js,jsx} --quiet

Но потом после этого я получил сообщение об ошибке с - Unexpected top-level property "ecmaFeatures"

В конечном итоге для решения проблемы я удалил node_modules, удалил все из~/.nvm/versions/node/<the version>/lib/node_modules , кроме папок npm и yarn, и просто набрал yarn, чтобы переустановить все.

После этого ./node_modules/.bin/eslint **/*.{js,jsx} --quiet заработал нормально (но путь к установке еще надо было указать.

Надеюсь, это поможет!

person Daydream Nation    schedule 29.06.2017
comment
У меня не установлен nvm, но я удалил node_modules, см. Обновленный вопрос. - person J86; 30.06.2017
comment
Попробуйте ./node_modules/.bin/eslint **/.*{js|jsx} --quiet Позже, при запуске webpack, он вызывает его аналогичным образом (в основном вы вызываете тот, который установлен в 'node_modules', когда вы запускали yarn в первый раз) - person Daydream Nation; 01.07.2017

Добавьте зависимость к .pre-commit-config.yaml file как дополнительную зависимость

person Kolitha Warnakulasooriya    schedule 21.08.2018