Цього тижня я читав вихідний код unbuild і знайшов кілька пакетів, з якими раніше не стикався або не використовував. Я хотів поділитись цікавими пакетами, що використовуються в цих OSS проектах, щоб ми могли дізнатись щось нове 😉
У цій статті розглядаються такі питання:
- Що таке hookable?
- Використання hookable в unbuild
Що таке hookable?
Hookable — це пакет, створений авторами з Unjs. Unjs надає інструменти для JS, бібліотеки та має близько 63 npm пакетів і 421 мільйон завантажень на місяць. Вау, це багато.
Репозиторій 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
Посилання
- https://github.com/unjs/unbuild/blob/main/src/build.ts#L182
- https://github.com/unjs/unbuild/blob/main/src/build.ts#L193
- 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.