Пакет “hookable” у вихідному коді unbuild.

Цього тижня я читав вихідний код unbuild і знайшов кілька пакетів, з якими раніше не стикався або не використовував. Я хотів поділитись цікавими пакетами, що використовуються в цих OSS проектах, щоб ми могли дізнатись щось нове 😉

У цій статті розглядаються такі питання:

  1. Що таке hookable?
  2. Використання hookable в unbuild

Що таке hookable?

Hookable — це пакет, створений авторами з Unjs. Unjs надає інструменти для JS, бібліотеки та має близько 63 npm пакетів і 421 мільйон завантажень на місяць. Вау, це багато.

pic

Репозиторій Hookable має опис "Очікувані хуки".

Цей пакет дуже простий у використанні:

Встановлення

npm install hookable

Використання

// Метод A:  
import { createHooks } from 'hookable'  

// Створення hookable екземпляра  
const hooks = createHooks()  

// Додаємо хук на 'hello'  
hooks.hook('hello', () => { console.log('Hello World' )})  

// Викликаємо хук 'hello'  
hooks.callHook('hello')

По суті, ви створюєте хук з колбеком і викликаєте ці хуки в іншій частині вашого коду для активації цього колбеку. Давайте подивимось, які хукки використовуються в коді unbuild.

Використання hookable в unbuild

Ініціалізація hookable

На лінії 182 в build.ts ви знайдете наступний код:

// Контекст зборки  
 const ctx: BuildContext = {  
 options,  
 jiti,  
 warnings: new Set(),  
 pkg,  
 buildEntries: [],  
 usedImports: new Set(),  
 hooks: createHooks(),  
 };

Реєстрація хуків

На лінії 185 в build.ts ви побачите такий код:

// Реєстрація хуків  
 if (preset.hooks) {  
 ctx.hooks.addHooks(preset.hooks);  
 }  
 if (inputConfig.hooks) {  
 ctx.hooks.addHooks(inputConfig.hooks);  
 }  
 if (buildConfig.hooks) {  
 ctx.hooks.addHooks(buildConfig.hooks);  
 }

Виклик хуків

У build.ts ви знайдете наступний код для виклику зареєстрованих хуків:

// Дозволяє підготовку та розширення контексту  
await ctx.hooks.callHook("build:prepare", ctx);  
// Викликаємо build:before  
await ctx.hooks.callHook("build:before", ctx);  
// Пропускаємо решту для stub та watch режиму  
if (options.stub || options.watch) {  
 await ctx.hooks.callHook("build:done", ctx);  
 return;  
}  
// Викликаємо build:done  
await ctx.hooks.callHook("build:done", ctx);

Про мене:

Привіт, мене звати Раму Нарасінга. Я вивчаю великі open-source проекти та створюю контент про їх архітектуру коду та кращі практики, ділячись цим через статті та відео.

Я відкритий до співпраці над цікавими проектами. Напишіть мені на email: [email protected]

Мій Github — https://github.com/ramu-narasinga

Мій вебсайт — https://ramunarasinga.com

Мій канал на Youtube — https://www.youtube.com/@thinkthroo

Навчальна платформа — https://thinkthroo.com

Архітектура кодів — https://app.thinkthroo.com/architecture

Кращі практики — https://app.thinkthroo.com/best-practices

Проекти для продакшн — https://app.thinkthroo.com/production-grade-projects

Посилання

  1. https://github.com/unjs/unbuild/blob/main/src/build.ts#L182
  2. https://github.com/unjs/unbuild/blob/main/src/build.ts#L193
  3. https://github.com/unjs/unbuild/blob/main/src/build.ts#L197
    4.
    https://www.npmjs.com/package/hookable https://github.com/unjs/unbuild/blob/main/src/build.ts#L93

Перекладено з: “hookable” package in unbuild source code.

Leave a Reply

Your email address will not be published. Required fields are marked *