219просмотров
27 ноября 2025 г.
Score: 241
Проверяем импорты через ESLint В процессе улучшения структуры проекта, которую я описывал здесь, задумался над базовыми проверками корректности импортов. Эта структура строится на «функциональном мышлении» (далее ФМ), в котором код должен быть разделён на данные, вычисления и действия, поэтому необходимо проверять корректность импортов между определёнными сегментами. Например, чтобы сегмент ui (в контексте ФМ это вычисления) не мог импортировать сегмент $api (в контексте ФМ это действия). На самом деле причин и проверок больше, но не суть. Для эксперимента был выбран eslint-plugin-boundaries. В целом неплохой инструмент, хотя сильно не хватает разделения контекста, но разработка в этом направлении вроде как ведётся. В моём случае, например, необходимы разные правила для проверки верхнего уровня папок и уровня сегментов. eslint.config.js import { defineConfig } from 'eslint/config';
import parser from '@typescript-eslint/parser';
import boundaries from './eslint-boundaries.js'; export default defineConfig([ { extends: [boundaries], files: ['src/**/.{ts,tsx}'], languageOptions: { parser }, settings: { 'import/resolver': { typescript: true } }, },
]); eslint-boundaries.js import boundariesPlugin from 'eslint-plugin-boundaries'; export default { plugins: { boundaries: boundariesPlugin, }, settings: { 'boundaries/elements': [ { type: '$control', pattern: 'src//$control/**' }, { type: '_core', pattern: 'src/_core/*', mode: 'full' }, // ... ], }, rules: { 'boundaries/element-types': [ 'warn', { default: 'allow', message: '[${file.type}] is not allowed to import [${dependency.type}]', rules: [ { from: '$control', disallow: ['$page'] }, { from: '_core', disallow: ['_ui-kit', 'admin', 'app'] }, // ... ], }, ], },
}; Полная версия файла тут. Да, все возможные варианты этот код не покрывает, но для начала этих проверок вполне достаточно.