Друкарня від WE.UA

Без довго вступу, почну одразу із конкретного прикладу. Я використовую npm пакет penthouse для створення css-critical. Але у нього є дві проблеми:

  1. Він оновлювався більше року тому назад

  2. Він не дуже добре працює з деякими TailwindCSS класами. Наприклад, lg:-top-12 або xl:-ms-8

Трохи детальніше про пункт №2. Проблема у тому, що це ми бачимо клас, як lg:-top-12 . Але коли ми дивимось вихідний css файл, то є наступне .xl\:-top-11 або .lg\:-left-1\/2 . Саме слеш та двокрапка створють проблему при формуванні css critical.

У пошуку рішення, я оглянув Pull requests у репозиторії пакету та знайшов цікавий комміт. Автор пропонує змінити регулярний вираз, який би не видаляв селектори, які містять : та \ .

Мені було цікаво перевірити це рішення у себе. І якщо воно працює, то залишити його у себе. Власне, так і виникла тема цього тексту.

Крок 1. Встановлення пакету penthouse у наш проєкт

pnpm add -D penthouse (на місці penthouse може бути будь-який пакет)

Крок 2. Patch пакету за допомогою PNPM

pnpm patch penthouse

PNPM створить тимчасову директорію, яку треба відкрити у редакторі

Patch: You can now edit the package at:

  C:\Users\<USER>\AppData\Local\Temp\6115092f3e6eadb7a3ed149ebbc80490

To commit your changes, run:

  pnpm patch-commit 'C:\Users\<USER>\AppData\Local\Temp\6115092f3e6eadb7a3ed149ebbc80490'

Копіюємо шлях та відкриваємо її і редакторі. У моєму випадку, це VS Code (відкриваю термінал та пишу)

code C:\Users\<USER>\AppData\Local\Temp\6115092f3e6eadb7a3ed149ebbc80490
Редактор VS Code з темою Catppuccin Frappe та іконками Catppuccin Icons Frappe

Мене цікавить файл selectors-profile.js , рядок 83.

Зберігаю зміни, закриваю редактор та у редакторі, де відкрито основний проєкт, виконую наступну команду

pnpm patch-commit 'C:\Users\<USER>\AppData\Local\Temp\6115092f3e6eadb7a3ed149ebbc80490'

Після цього, наш проєкт буде містити сам патч + налаштування для його застосування, якщо інший розробник розгорне проєкт у себе

Висновки

Ось так просто ви можете покращити пакет, який давно не розвивається, але використовується у вашому проєкті.

Дякую за увагу!

Статті про вітчизняний бізнес та цікавих людей:

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Олександр Терещук
Олександр Терещук@oletere

WordPress Developer

4Довгочити
1.1KПерегляди
2Підписники
На Друкарні з 2 травня 2023

Більше від автора

  • Як оновити застосунки на Windows у 2025? Пакетний менеджер Winget. Зручно, просто та необхідно

    Я завжди шукаю нові інструменти, щоб зробити свою роботу за ноутбуком комфортнішою та ефективнішою. Програмне забезпечення, про яке ми будемо говорити, я наполегливо раджу кожному, у кого Windows 10/11 є основною системою. Мова про пакетний менеджер Winget.

    Теми цього довгочиту:

    Winget
  • NVM або чому у тебе має бути декілька версій NodeJS

    Одна і певно найвагоміша причина, чому вам потрібно мати декілька версій NodeJS — підтримка декількох проєктів. Розберемось, як встановити NVM та додати декілька версій NodeJS на твою робочу машину

    Теми цього довгочиту:

    Nodejs
  • Font Subsetting. Оптимізація шрифту для WEB

    Стискання картинок, ліниве завантаження ресурсів, стискання стилі та скриптів — хороший тон веброзробника. А чи оптимізуєте ви шрифти? Гадаєте конвертації у WOFF2 достатньо? У цьому матеріалів поговоримо про Font Subsetting

    Теми цього довгочиту:

    Шрифт

Це також може зацікавити:

  • λanguage: Неформальний опис мови

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

    Теми цього довгочиту:

    Js

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити:

  • λanguage: Неформальний опис мови

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

    Теми цього довгочиту:

    Js