typescript - Hur man manuellt uppdaterar ett föråldrat typings-paket


Jag har en NodeJS-applikation som jag skriver i TypeScript. Den använder många Node-paket. Inte alla dessa paket har TypeScript-definitioner, så jag använder Typings för att få de separata definitionsfilerna.

När jag distribuerar min applikation till produktionsservern har jag en Git-hook som kör npm install, typings install och tsc, eftersom dessa inte ingår i Git-förrådet.

När en ny version av en Typings-definitionfil släpps på DefinitelyTyped får jag varningar när jag kör typings install att mina definitionsfiler är föråldrade (uppdaterade, ersatta eller borttagna):

typings WARN deprecated 6/30/2016: "registry:dt/bluebird#2.0.0+20160319051630" is deprecated (updated, replaced or removed)
typings WARN deprecated 7/5/2016: "registry:dt/knex#0.0.0+20160622193910" is deprecated (updated, replaced or removed)
typings WARN deprecated 7/20/2016: "registry:dt/node#6.0.0+20160613154055" is deprecated (updated, replaced or removed)
typings WARN deprecated 7/19/2016: "registry:dt/lodash#3.10.0+20160619033623" is deprecated (updated, replaced or removed)

Vad kan göras åt detta? Finns det ett enkelt sätt att uppdatera dem alla? Det ser ut som att filen typings.json anger ett versionsnummer för paketet efter #-tecknet och ett datum efter +-tecknet. Om en ny definitionsfil laddas upp till DefinitelyTyped, är det inte vanligtvis säkert att anta att den är mer korrekt eller mer komplett än den tidigare versionen?

Finns det ens något sanktionerat sätt att uppdatera dessa manuellt, förutom typings uninstall --save följt av typings install --save för varje paket? Verkar krångligt, och det borde finnas ett enkelt sätt, något som typings update [package-name].

Svar #1

Enkelt i TypeScript 2.0

Det bör också nämnas att TypeScript 2.0, som officiellt släpptes i september 2016, har en enklare lösning integrerad i npm (i samarbete med författaren av Typings och författarna av TSD). Där du i princip får Definitely Typed-paketen som @types/packageName:

npm install --save packageName @types/packageName

samt att kunna automatiskt hämta typer från npm-paket direkt. Vilket gör att du enkelt kan använda package.json och npm för att direkt hantera dina typedefinitioner. I vilket fall

npm update

kommer att få exakt det beteende du ursprungligen begärde.

Kolla in blogginlägget om beta-annonsen och den officiella Typescript-dokumentationen för mer information.

Breaking changes från @types utlöser inte varningar

Vill dock notera att en medlem i Typescript-teamet (Ryan Cavanaugh) nämnde i kommentarsfältet för TypeScripts Beta-annons att åtminstone den nuvarande versionen av Betan han hänvisade till inte varnade för föråldrade typdefinitioner. Även för semver-majoruppdateringar. Det betyder att om du ville ha typdefinitioner för lodash version 4 och istället fick för lodash version 3, skulle det inte finnas någon varning. Alltså får man typdefinitionen för ett bibliotek som har genomgått brytande förändringar. Bara något att potentiellt ha i åtanke (REDIGERA: Har personligen ännu inte bekräftat om detta är fallet för den slutliga 2.0-releasen).

Ingen uppdateringskommando

Det finns inget uppdateringskommando, det finns ett problem på Typings om det, som innehåller både unix- och powershell-skript för att automatiskt göra någon slags uppdatering också.

Specifikt installationskommando

Som du kan se i CLI-alternativen kan du dock uppdatera typdefinitionen för ett specifikt paket med en specifik källa och semver-intervall.

Om källan är Definitely Typed skulle du prefixa paketet med dt~. Om du däremot har semver-versionen ^3.10.0, skulle du ytterligare suffixa paketnamnet med @^3.10.0.

Beroende på om det är ett vanligt eller utvecklingsberoende skulle du även lägga till --save eller --save-dev respektive. Samtidigt skulle du dessutom lägga till --global om det är ett globalt sådant beroende. Detta bör vara läsbart i typings.json-filen

För att uppdatera lodash-paketet som du nämnde ovan till den senaste typdefinitionen med semver-version ^3.10.0 skulle du skriva:

typings install dt~lodash@^3.10.0 --save

eller

typings install dt~lodash@^3.10.0 --save --global

om det är ett globalt beroende.

Detta kommer att uppdatera hash och datum för typings.json och installera den senaste definitionen för det angivna semver-intervallet. Om det däremot inte finns någon uppdatering att hitta, sker ingen förändring av filen. Om du är fast besluten att automatisera denna uppdateringsprocess kan du därför skriva ett skript som försöker göra dessa uppdateringar oavsett.

Varningar

Observera att Definitely Typed-typdefinitioner nödvändigtvis inte alltid är korrekt märkta med versioner. De kan potentiellt sakna märkta versioner helt eller ha stora luckor mellan dem. Det kan till exempel också vara så att en omärkt version är nyare än den senaste märkta versionen, detta är för närvarande fallet för lodash på Definitely Typed (25 juni 2016).

Du kan enkelt ta reda på vilka taggade versioner som finns för ett visst paket på en viss källa med:

typings view <source>~<package> --versions

för paketet lodash med Definitely Typed som källan skulle det alltså vara:

typings view dt~lodash --versions

För att se otaggade versioner som kan vara mer uppdaterade tror jag att du faktiskt måste inspektera motsvarande katalog i Definitely Typed-repot, där det kan nämnas i det senaste commitet eller anges högst upp i filen.

Relaterade artiklar