dependency-cruiser: وابستگیهای پروژه جاوااسکریپتی رو با قانونهای خودت چک کن
خلاصهٔ کاملتر
dependency-cruiser یه ابزار متنبازه که تو پروژههای JavaScript، TypeScript، CoffeeScript و LiveScript میگرده و همه وابستگیها رو پیدا میکنه، یعنی اینکه هر فایل کدوم فایل یا پکیج رو import یا require کرده. از ES6 و CommonJS و AMD هم پشتیبانی میکنه. کارش دو تا چیزه: وابستگیها رو با قانونهای خودت چک میکنه و تخلفها رو گزارش میده، هم بهصورت متن برای build و هم بهصورت گرافیکی.
شروع کار سادهست: پکیج رو بهعنوان dev dependency نصب میکنی و با npx dependency-cruiser --init یه فایل تنظیمات به اسم .dependency-cruiser.js میسازی. این دستور یه کم محیط پروژه رو بررسی میکنه، چند تا سؤال میپرسه و چند تا قانون پیشفرض هم میذاره که تقریباً به درد هر پروژهای میخوره. مثلاً پیدا کردن وابستگی حلقوی (یعنی وقتی A به B وابستهست و B دوباره به A)، پکیجهایی که تو package.json نیومدن، فایلهای orphan (یعنی فایلهایی که هیچکس ازشون استفاده نمیکنه) و کد production که به devDependencies تکیه کرده.
قانونهای خودت رو هم میتونی به همین فایل اضافه کنی. مثلاً این قانون جلوی اینو میگیره که کدی بیرون از پوشه test به فایلهای تست وابسته بشه:
{
"name": "not-to-test",
"severity": "error",
"from": { "pathNot": "^test" },
"to": { "path": "^test" }
}بعد با npx dependency-cruiser src پروژه چک میشه و تخلفها با فرمتی شبیه eslint نشون داده میشن. یعنی میشه گذاشتش تو CI تا هر کی قانون معماری رو شکست، build خطا بده. از نسخه 13 به بعد دیگه لازم نیست گزینه --config رو دستی بدی و خودش فایل تنظیمات رو پیدا میکنه. نویسندهها میگن خود dependency-cruiser هم تو build خودش از همین ابزار برای چک کردن خودش استفاده میکنه.
یه کار جانبی جذابش هم ساختن نمودار وابستگیهاست. با خروجی نوع dot و ابزار GraphViz میشه یه فایل SVG از ساختار پوشه src ساخت. فرمتهای دیگه مثل mermaid، json، csv، html و متن ساده هم پشتیبانی میشن. برای تجزیه کد هم از پارسر acorn استفاده میکنه و با jsx، tsx، vue و svelte و alias های Webpack هم کار میکنه. لایسنسش هم MIT هست.
نکات کلیدی:
- با دستور --init یه فایل .dependency-cruiser.js با قانونهای پیشفرض ساخته میشه
- قانونهای پیشفرض وابستگی حلقوی، فایلهای orphan و پکیجهای جاافتاده از package.json رو پیدا میکنن
- گزارش تخلفها با فرمتی شبیه eslint هست و برای CI مناسبه
- خروجی نمودار در فرمتهای dot، mermaid، json، csv و html پشتیبانی میشه
- از نسخه 13 به بعد گزینه --config دیگه لازم نیست
- لایسنس MIT داره و از acorn برای پارس کد استفاده میکنه




