Монорепо — это (хорошая|плохая) стратегия? Честно говоря, мне все равно. Но я понял, что часто использую его при разработке проектов NodeJS+React.
Когда я выполняю автоматический статический анализ кода в монорепозитории, всегда возникают две основные проблемы: покрытие и шаблоны кода.
Что касается охвата, то ответ довольно прост: Codacy позволяет создавать частичные отчеты как для бэкенда, так и для фронтенда. Это задокументировано здесь и выглядит примерно так:
➜ ~ codacy-coverage-reporter report -l javascript -r server_report.xml --partial ➜ ~ codacy-coverage-reporter report -l javascript -r client_report.xml --partial ➜ ~ codacy-coverage-reporter final
В главе Шаблоны кода это всегда будет зависеть от линтера. ESLint — это де-факто утилита линтинга для JavaScript, и, поскольку у нее есть множество полезных плагинов (да, и для безопасности), я использую именно ее. Само по себе это не решает моей проблемы с наличием двух разных проектов в одном репозитории. К счастью, есть способ:
В папке src моего проекта я обычно создаю папку client и server. И здесь имеет смысл иметь файл .eslintrs.js. В этом файле можно задать общие правила или даже оставить пустым
[repo]/src/.eslintrc.js module.exports = { }
Затем в каждую папку клиента или сервера можно добавить дополнительный файл .eslintrc.js, расширяющий файл src, переопределяющий правила, определенные ранее.
[repo]/src/client/.eslintrc.js module.exports = { "extends": "../.eslintrc.js", rules: { quotes: [2, "single"] } } [repo]/src/server/.eslintrc.js module.exports = { "extends": "../.eslintrc.js", rules: { quotes: [2, "double"] } }
Локально, похоже, все идет так, как ожидалось. Теперь в Кодаси! На вкладке Шаблоны кода я выбрал Файл конфигурации вместо правил из пользовательского интерфейса.
И получили точно такие же и ожидаемые результаты.
Стратегия монорепо может быть спорной, но никогда не будет проблемой.