typescript - Starta om tsserver när node_modules ändras, dvs; när man använder npm link


När du arbetar med ett npm-paket är det bekvämt att använda npm link för lokal utveckling.

Förord

Till exempel, med antagande av följande mappstruktur:

/lib
/consumer

Ett npm-paket "lib" skulle finnas i /lib, och npm link . gör det tillgängligt för länkning. Sedan, från /consumer, installerar körning av npm link lib det pågående utvecklingspaketet lib. I /lib skulle jag sedan köra ett build:watch-kommando för att kontinuerligt bygga/översätta om biblioteket till js + .d.ts-filer, och från /consumer skulle jag använda ett Hot-Module-Reloading-system såsom Vite.

Under utvecklingen skulle jag ständigt växla fram och tillbaka mellan /lib och /consumer. Detta fungerar utmärkt. Jag kan göra ändringar på båda ställena och HMR-systemet uppdaterar webbappen.

Men när jag gör ändringar i /lib kraschar detta TypeScript-servern i VSCode. Jag får varningar om att exporterna för den importerade, länkade modulen inte längre är tillgängliga, och röda understrykningar dyker upp överallt.

Fråga

Att köra "TypeScript: Restart TS server" från kommandopaletten löser problemet varje gång, så jag antar att min fråga är: Hur kan jag få TS-servern att starta om sig själv automatiskt i en situation som denna? Jag antar att den bara behöver veta när node_modules ändras på grund av den uppdaterade länkade biblioteket?

Svar #1

När du bygger /lib-katalogen tas filer inuti node_modules bort. Det betyder att du kommer behöva starta om VS Codes TS-server. Den goda nyheten är att VS Code arbetar på en automatisk TS-omstartsfunktion. Du kan läsa mer om det i detta GitHub-ärende.

Under tiden kan du prova detta VS Code-tillägg. Efter installationen anger du bara de filer det ska övervaka. För en konfiguration som min med turborepo och delpaket fungerade detta mönster:

**/packages/lib/dist/**/*.{ts}