💥 Представляем Скотта, нового Маджа!

Привет всем, надеюсь, у вас все хорошо!

Сегодня я очень рад поделиться интересным проектом, над которым я работаю уже несколько месяцев: skott.

skott — это инструмент, который генерирует граф зависимостей из ваших проектов Node.js (включая модули ES6 и CommonJS!) и помогает вам обнаружить циклические зависимости, стоимость импорта, размеры файлов, неиспользуемые импорты/экспорты (работа в процессе) и многое другое 💥.

Встроенные в Node.js и/или сторонние зависимости npm также могут быть настроены для добавления в граф. Основная цель — воспроизвести архитектуру вашего Node.js приложения на уровне файлов.

Установка и использование

$ npm install skott
Вход в полноэкранный режим Выход из полноэкранного режима

skott предоставляет API для перемещения по графу проекта, глубокого поиска циклических зависимостей, поиска родителей или детей для заданного набора узлов и т.д.

Ниже приведен краткий обзор API:

import skott from "skott";

const { 
  getStructure, 
  findCircularDependencies, 
  findParentsOf, 
  findLeaves 
} = await skott({
  /**
   * The entrypoint of the project. Must be either a CommonJS or ES6 module.
   * For now, TypeScript files are not supported as entrypoints.
   */ 
  entrypoint: "dist/index.js",
  /**
   * Define the max depth of for circular dependencies search. This can be useful 
   * for performance purposes. This defaults to POSITIVE_INFINITY.
   */
  circularMaxDepth: 5,
  /**
   * This defines whether the base directory of the entrypoint must be included
   * in all the relatives file paths.
   * For the specified `dist/index.js` above, it would consider the root path
   * to be `./` consequently `dist/` would never appear in any file paths.
   */
  includeBaseDir: false
});
Вход в полноэкранный режим Выход из полноэкранного режима

skott также можно использовать через CLI. Вот быстрый предварительный просмотр графа, сгенерированного для библиотеки fastify, с помощью CLI:

Мы также можем решить отслеживать больше зависимостей, например, сторонние зависимости npm (указав опцию «—trackThirdPartyDependencies»).

Встроенные зависимости Node.js также могут быть отслежены с помощью опции «—trackBuiltinDependencies».

Отображение дерева файлов

В CLI доступны различные режимы отображения, включая file-tree, который восстанавливает каталог файлов из графа, что гораздо более лаконично:

Циркулярные зависимости

skott также помогает очень эффективно находить круговые зависимости в проекте, вы даже можете задать максимальную глубину поиска, чтобы избежать глубокого поиска, который может быть дорогостоящим.

Skott работает быстро

Мы можем легко сравнить skott с madge, потому что skott уже охватывает большинство функций, которые раскрывает madge (за исключением генерации изображений).

Я провел несколько сравнительных тестов на время, необходимое для построения набора графиков из популярных библиотек для skott и madge, и вот результаты:

Knex.js (+6O файлов)

knex.js Построитель SQL-запросов, который является гибким, портативным и интересным в использовании!

  • использование skott занимает 60 мс

  • использование madge занимает 450 мс

Для построения всего графа knex.js с еще большим количеством метаданных, skott работает в 7.5 раз быстрее!

Fastify.js (30 файлов)

fastify.js — это быстрый и малозатратный веб-фреймворк для Node.js.

  • использование skott занимает 50 мс

  • использование madge занимает 350 мс

В данном случае skott в 7 раз быстрее, чем madge.

Следите за новостями

Будет реализовано еще много функций (*skott пока не имеет основной версии), чтобы помочь вам легко обнаружить и понять, что происходит под капотом вашего Node.js проекта! Я также думаю о разработке веб-приложения, которое поможет вам визуализировать графики и все метаданные, связанные с каждым файлом (количество импортов, размер файла, неиспользуемые импорты и т.д.).

Делюсь путешествием по созданию библиотеки с открытым исходным кодом

Я также начну серию статей о пути создания skott, которая, в частности, включает в себя:

  • Что такое парсер программ и как его использовать
  • Как интерпретировать абстрактное синтаксическое дерево
  • Как сделать все это полностью тестируемым, используя внедрение зависимостей и Test-Driven Development!

Не стесняйтесь присылать звезды ⭐️, вопросы, отзывы прямо на GitHub здесь, так как это позволит мне направить проект туда, где он принесет наибольшую пользу каждому разработчику.

Спасибо, что дочитали до конца, желаю всем прекрасного дня ☀️

Оцените статью
devanswers.ru
Добавить комментарий