Budowanie i wydawanie
Lokalne budowanie
bun install
bun run buildŁańcuch budowania:
bun run build:injected(build-scripts/build-injected.mjs): esbuild kompilujesrc/injected/page-detector.tsipage-source-search.tsjako oddzielne pliki IIFE dopublic/injected/vite build(@crxjs/vite-plugin): pakuje cztery wejścia — background / popup / settings / help — dodist/precompileRulesPlugin(hookcloseBundlepluginu Vite): skanujedist/rules/*.jsoni dla każdej reguły liścia wstrzykuje__hints/__legacyHints/__keywordCombinedminifyJsonAssets(hookcloseBundlepluginu Vite): wszystkie pliki JSON są przepisywane przezJSON.stringify(parsed), usuwając wcięcia i białe znaki
Gotowy katalog dist/ można bezpośrednio załadować w trybie dewelopera na stronie chrome://extensions/.
Tryb deweloperski z hot reload
bun run devSerwer deweloperski Vite + HMR crxjs: zmiany w src/ui/** (okno podręczne / ustawienia / instrukcja obsługi) są automatycznie podstawiane bez przeładowania. Po zmianach w src/background/** lub src/content/** należy kliknąć przycisk odświeżania na karcie rozszerzenia w chrome://extensions/.
Sprawdzanie typów i linting
bun run typecheck # vue-tsc --noEmit, ścisłe sprawdzanie typów w całym projekcie
bun run lint # eslint srcPrzed zatwierdzeniem zmian uruchom formatowanie dla całego projektu:
npx prettier --write .Zarządzanie numerem wersji
Pole version w package.json jest źródłem prawdy. @crxjs/vite-plugin automatycznie synchronizuje go z dist/manifest.json.
Zwykłe zmiany funkcjonalności, reguł i poprawki zwiększają patch. Po osiągnięciu 99 przez patch następuje przejście do kolejnego minor — numer 1.1.100 nie jest używany:
# 1.1.98 -> 1.1.99
# 1.1.99 -> 1.2.0GitHub Release jest tworzony tylko dla wersji wymagających nowej paczki instalacyjnej: x.y.0, x.y.10, x.y.20, ..., x.y.90. Na przykład 1.2.0 i 1.2.10 wymagają wydania, natomiast 1.2.5 i 1.2.15 — nie.
# po zmianie wersji w package.json
git add package.json
git commit -m "chore: bump 1.2.10"
git push origin mainPrzepływ wydania na GitHub
.github/workflows/release-extension.yml jest wyzwalany w dwóch sytuacjach:
- Opublikowanie release w interfejsie GitHub (zdarzenie
release: published) - Ręczne uruchomienie workflow_dispatch na stronie Actions (opcjonalne podanie
release_tag)
Przepływ wydania:
- checkout + instalacja bun + Node 20
bun install --frozen-lockfilebun run build- Odczyt wersji z
dist/manifest.json, weryfikacja zgodności z tagiem release - Spakowanie całego
dist/dostackprism-v{ver}.zip+ sha256 - Jeśli skonfigurowano sekret
EXTENSION_PRIVATE_KEY: podpisanie plikustackprism-v{ver}.crxprzeznpx crx3+ sha256; w przeciwnym razie krok pomijany, wysyłany tylko zip gh release upload --clobber— przesłanie wszystkich artefaktów do tagu releaseactions/upload-artifact— kopia zapasowa artefaktu
Informacje o wydaniu
Informacje o wydaniu są przygotowywane na podstawie git log --oneline vPREV..HEAD od poprzedniego tagu release do bieżącego commitu — nie przez bezpośrednie wklejenie listy commitów. Zmiany są pogrupowane w sposób zrozumiały dla użytkownika, np.:
- Ulepszenia reguł
- Okno podręczne i strona ustawień
- Dokumentacja
- Proces budowania i wydawania
Informacje o wydaniu opisują tylko zmiany istotne dla użytkowników i opiekunów. Nie zawierają wzmianek o lokalnym formatowaniu, sprawdzaniu typów, lintingu ani poleceniach budowania.
Klucz do podpisywania CRX
Przed pierwszym wydaniem należy wygenerować klucz prywatny RSA i skonfigurować go jako sekret repozytorium GitHub.
Generowanie klucza prywatnego
openssl genrsa -out extension.pem 2048WARNING
Pliku extension.pem absolutnie nie wolno utracić — wygenerowanie nowego zmieni ID rozszerzenia (Chrome uzna je za inne rozszerzenie). Przechowuj lokalną kopię zapasową.
Konfiguracja na GitHub
- Ustawienia repozytorium → Secrets and variables → Actions → New repository secret
- Name:
EXTENSION_PRIVATE_KEY - Secret: wklej całą zawartość pliku
extension.pem(włącznie z-----BEGIN PRIVATE KEY-----i-----END PRIVATE KEY-----) - Zapisz
Przepływ wydania będzie automatycznie używał tego klucza do podpisywania crx.
Co się stanie bez konfiguracji
Przepływ wydania nadal działa, ale w artefaktach nie będzie pliku .crx. Użytkownicy będą mogli instalować rozszerzenie tylko przez rozpakowanie archiwum zip.
Lista kontrolna przed wydaniem
- [ ] Wykonano
npx prettier --write . - [ ]
bun run typecheckzakończone sukcesem - [ ]
bun run lintzakończone sukcesem - [ ]
bun run buildzakończone sukcesem - [ ] Ręczne testy kluczowych ścieżek w Chrome po załadowaniu
dist/(otwarcie okna podręcznego, rozpoznanie strony, odświeżenie, skopiowanie pełnego raportu stosu technologicznego, dodanie reguły na stronie ustawień) - [ ] Aktualizacja numeru wersji w
package.json - [ ] git commit + push
- [ ] Jeśli wersja spełnia kryterium wydania: opublikowanie release w interfejsie GitHub (tag w formacie
v{version}, zgodny zpackage.json) - [ ] Po zakończeniu przepływu wydania: potwierdzenie obecności zip / crx i sha256 w zasobach release
Publikacja w Chrome Web Store
Przepływ wydania nie publikuje automatycznie w Chrome Web Store — interfejs API publikowania CWS wymaga przepływu OAuth2, więc proces jest ręczny:
- Spakuj katalog
dist/do archiwum zip (taki sam jak artefakt zip z przepływu) - Chrome Web Store Developer Dashboard → Prześlij nową wersję
- Uzupełnij opis zmian, poczekaj na weryfikację (zazwyczaj 1-3 dni robocze)