Ошибка eslint no-extraneous-dependencies с рабочими пространствами npm
Я настроил монорепозиторий с использованием рабочих пространств NPM со следующей структурой высокого уровня:
root
common // Shared package, named @company/common
src
...
package.json
tsconfig.json
web // ReactJS package, named @company/web
config
...
public
...
src
...
package.json
tsconfig.json
mobile // React Native package, named @company/mobile
...
package.json
tsconfig.json
.eslintrc.json
.prettierrc
package.json
tsconfig.json
tsconfig.base.json
Все мои пакеты должны быть частными и отмечены как таковые в соответствующих
package.json
файлы.
Мне удалось все настроить так, чтобы я мог писать такой код в веб-приложениях и мобильных рабочих областях:
import { ITestInterface } from '@company/common';
С моей текущей настройкой я получаю предупреждение eslint в моей IDE (VS Code) всякий раз, когда я открываю любой файл, который импортирует что-либо из
@company/common
:
'@company/common' should be listed in the project's dependencies. Run 'npm i -S @company/common' to add it
Я бы предпочел не отключать это предупреждение полностью, если это вообще возможно. Есть ли способ настроить eslint, чтобы он понимал монорепозиторий, чтобы он не выдавал мне предупреждения, когда я пытаюсь импортировать что-то из пакета (рабочей области) в моем монорепозитории?
2 ответа
У нас была аналогичная проблема в нашем монорепозитории с использованием аналогичной настройки (один файл eslintrc в корне), для которой потребовалось довольно много времени, чтобы найти подходящее решение.
В нашем eslintrc у нас было это:
module.exports = {
...
settings: {
'import/resolver': {
typescript: {
extensions: ['.ts', '.tsx'],
project: ['**/tsconfig.json'],
},
},
...
}
Что сработало очень хорошо, за исключением тонны no-extraneous-dependency . В итоге нам пришлось создать дополнительный файл eslintrc для каждого проекта, например:
root
team-one
team-one-frontend
.eslintrc.js
tsconfig.json
team-one-frontend2
.eslintrc.js
tsconfig.json
team-two
team-two-frontend
.eslintrc.js
tsconfig.json
team-two-frontend2
.eslintrc.js
tsconfig.json
.eslintrc.js
.eslintignore
Каждый файл eslintrc для конкретного проекта будет переопределять только то, где искать файлы tsconfig, при этом используя все правила и другую конфигурацию от root. Так, например,.eslintrc.js.
в team-one-frontend будет содержать это:
module.exports = {
settings: {
'import/resolver': {
typescript: {
project: ['team-one/team-one-frontend'],
},
},
},
};
Тот же контент с тремя другими путями в трех других проектах.
Может быть, перемещение
.eslintrc.json
к каждому отдельному пакету? Вы пытались запустить
npm install
опять в корень?
У меня такая установка, и у меня нет этой проблемы.
root
back-end
src/
.eslintrc.js
tsconfig.json
tsconfig.ref.json
package.json
front-end
src/
.eslintrc.js
tsconfig.json
tsconfig.ref.json
package.json
shared
// some .ts files
package.json
package.json
tsconfig.json
Если вас интересует tsconfig.ref.json, вот пример его настройки: https://2ality.com/2021/07/simple-monorepos.html .