node.js - Hvorfor ikke transpile TypeScript med npm sitt `prepare` livssyklus-skript?


Ansvarsfraskrivelse: Jeg er nybegynner med både JavaScript og TypeScript.

Mange TypeScript-prosjekter inkluderer et skript kalt build i sin package.json. Skriptet er ment å transpile kode til JavaScript ved å kalle tsc:

{
    "name": "my-typescript-project",
    "devDependencies": {
        "typescript": "^5.1.3",
        …
    },
    "scripts": {
        "build": "tsc",
        …
    }
    …
}

Fordi build ikke er noen av npm sine livssyklus-skript, blir det ikke kjørt automatisk. I stedet må det kjøres manuelt med kommandoen npm run-script.

Siden versjon 4.0.0 støtter npm et livssyklus-skript kalt prepare som den kjører på følgende tidspunkt:

  • Kjøres FØR pakken pakkes, dvs. under npm publish og npm pack
  • Kjører på lokal npm install uten noen argumenter
  • Kjøres ETTER prepublish, men FØR prepublishOnly
  • MERK: Hvis en pakke som installeres gjennom git inneholder et prepare-skript, vil dens dependencies og devDependencies bli installert, og prepare-skriptet vil bli kjørt, før pakken pakkes og installeres.

Ved å bytte fra det tilsynelatende vanlige build til prepare for formålet med å transpile TypeScript til JavaScript, ville man ikke lenger måtte transpile kode manuelt, og kunne installere TypeScript-prosjekter som git-avhengigheter sømløst. Hvorfor bruker ikke TypeScript-prosjekter prepare for å kjøre tsc?

En mulig grunn til å bruke build ville være å forbli kompatibel med andre pakkebehandlere; Yarn støtter ikke prepare lenger, og det gjør ikke pnpm heller. Prosjekter må imidlertid forplikte seg til én pakkebehandler; å bytte til en annen vil kreve konvertering av låsefilen, blant annet.

Relaterte artikler