πŸ’₯ ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ Π‘ΠΊΠΎΡ‚Ρ‚Π°, Π½ΠΎΠ²ΠΎΠ³ΠΎ МадТа!

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ всСм, надСюсь, Ρƒ вас всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ!

БСгодня я ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π΄ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ интСрСсным ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ ΡƒΠΆΠ΅ нСсколько мСсяцСв: 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
Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ