4.7 KiB
Instalacja ipal-kit
Trzy drogi. Wybierz jedną i trzymaj się jej — mieszanie (raz git, raz rejestr, raz tarball) to najczęstsze źródło błędów instalacji.
Droga A — z GitHuba (zalecana dla zespołu)
Wymaga, żeby dist/ był zacommitowany w repo (nie budowany u instalującego).
pnpm add github:rasm-its/ipal-kit
# konkretny tag (stabilniej):
pnpm add github:rasm-its/ipal-kit#v1.0.0
Wymagania po stronie projektu:
-
onlyBuiltDependencies— pnpm blokuje skrypty build z paczek git. Jeśli pakiet ma jakiekolwiek skrypty postinstall, dodaj w package.json projektu:"pnpm": { "onlyBuiltDependencies": ["@intecion/ipal-kit"] }(Jeśli plugin nie ma
prepare/postinstall — patrz niżej — to niepotrzebne.) -
peer-zależności — plugin ich nie zaciąga, projekt musi mieć:
pnpm add @payloadcms/[email protected] @payloadcms/[email protected] \ nodemailer lucide-react slugify server-only
Wymagania po stronie pluginu (raz, przy wydawaniu):
dist/w repo — bo instalacja z git nie buduje. Zbuduj i zacommitujdistprzed każdym wydaniem.- BRAK
prepare: pnpm buildw package.json — inaczej pnpm próbuje budować przy instalacji i żądaonlyBuiltDependencies. Skorodistjest w repo, build jest zbędny. - główny
exportswskazujedist, niesrc— instalacja z git czyta głównyexports(publishConfig działa TYLKO przynpm publish, nie przy git). Wszystkie ścieżki./dist/*.jsi./dist/*.d.ts. - jeden blok
exports— nie zostawiajpublishConfig.exportsobok głównego; dwa bloki potrafią rozjechać rozwiązywanie modułów. - żadnej self-reference — pakiet nie może mieć siebie w
dependencies("@intecion/ipal-kit": "git+..."). Wchodzi, gdy odpaliszpnpm addw katalogu pluginu — NIGDY tego nie rób.
Droga B — GitHub Packages (rejestr)
Publikujesz zbudowany pakiet; instalujący pobiera gotowy dist, nie buduje.
Plugin — publishConfig.registry + token z write:packages:
echo "//npm.pkg.github.com/:_authToken=TOKEN" >> ~/.npmrc
npm version patch && npm publish
Projekt — .npmrc ze scope + token z read:packages:
@intecion:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=TOKEN
pnpm add @intecion/ipal-kit
Zaleta nad Drogą A: semver (koniec z ręcznym commitowaniem dist), publishConfig
działa (nie musisz ruszać głównego exports). Wada: token u każdego instalującego.
Droga C — lokalny tarball (development, przekazanie pliku)
# w pluginie
pnpm build && pnpm pack --out ipal-kit.tgz
# w PROJEKCIE (nie w pluginie!)
pnpm add ~/sciezka/ipal-kit/ipal-kit.tgz
--out ipal-kit.tgz daje stałą nazwę — bez tego scope zamienia / na -
(intecion-ipal-kit-1.0.0.tgz).
Twarde zasady (wyparzone w boju)
- NIGDY
pnpm add ...ipal-kit...w katalogu pluginu. Tworzy self-reference, która zatruwa każdą kolejną instalację. Zawsze w katalogu projektu. Sprawdzajpwdprzed każdympnpm add. - Sprawdzaj REPO, nie plik lokalny. pnpm z git bierze stan repo. Po zmianie:
git show origin/main:package.json | grep '"import"'— musi pokazać./dist/. Commit z nazwą "fix" nie znaczy, że fix jest w commicie. - Nie edytuj package.json
sedem. Rozjeżdża strukturę (dwa bloki exports). Nadpisuj cały plik. - Zostajesz na 1.0.0? Czyść cache przy każdym reinstall:
Publikacja z bumpem wersji (Droga B) to znosi.
rm -rf node_modules/@intecion node_modules/.pnpm/*ipal-kit* .next pnpm store prune && pnpm install - Weryfikuj rozwiązanie modułu, nie tylko instalację:
Ma wypisać ścieżkę do
node -e "console.log(require.resolve('@intecion/ipal-kit/next/middleware'))"dist, nie błąd. Jeśli pokazujesrc/...ts→ głównyexportswskazuje src (patrz Droga A).
Diagnostyka — objaw → przyczyna
| Objaw | Przyczyna |
|---|---|
ERR_PNPM_FETCH_404 na @scope/... |
pakiet nieopublikowany; użyto nazwy rejestrowej zamiast github: |
ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED |
prepare w package.json + brak onlyBuiltDependencies |
Cannot find module .../src/exports/X.ts |
główny exports wskazuje src; instalacja z git nie widzi publishConfig |
ENOENT ...ipal-kit-1.0.0.tgz przy instalacji |
self-reference w dependencies pluginu |
| Turbopack „Module not found" mimo pliku na dysku | dwa bloki exports w package.json; Node bierze zły |
pnpm add przeszło, pakietu brak w node_modules |
instalacja do złego katalogu, albo przerwana — sprawdź pwd |
| stary kod mimo reinstall (1.0.0) | cache; pnpm store prune + rm -rf .next |
Po instalacji — konfiguracja pluginu: getting-started.md.