typescript - Bruke forskjellige versjoner av en avhengighet i forskjellige pakker i et Yarn Workspace
Jeg er relativt ny på å bruke Yarn Workspaces og ha en Monorepo-oppsett, så tilgi meg hvis dette allerede har blitt besvart. Jeg tror ikke jeg har funnet et klart svar på om dette er mulig for et Monorepo-oppsett som bruker Yarn Workspaces.
Jeg vil gjerne vite om det er mulig å bruke to forskjellige versjoner av en avhengighet (i mitt tilfelle TypeScript) i forskjellige pakker, og hvordan man gjør det.
Målet mitt er å låse en versjon av TypeScript (3.4.5) i Pakke A og bruke rotens package.json-versjon (3.5.0) av TypeScript for alle andre pakker i dette monorepoet.
Dette er mappestrukturen. Ideelt sett ville PackageA bruke 3.4.5, og PackageB/PackageC ville bruke hvilken som helst versjon som er definert i rotens package.json
|-- packages
|-- packageA
|-- packageB
|-- packageC
|-- package.json
Dette er hva jeg har prøvd så langt:
Jeg har prøvd å legge til nohoist i mine workspace-alternativer i webpack-konfigurasjonen, men jeg tror ikke Package A bruker TypeScript 3.4.5 siden jeg ikke får det forventede resultatet. Når jeg endrer TypeScript-versjonskravet i den øverste package.json til 3.4.5, får jeg riktig resultat. Det ville være den beste situasjonen om jeg kunne fortsette å bruke den nyeste TS for alle andre pakker, men beholde den lavere versjonen for Package A.
Jeg har også prøvd å legge til en package.json i PackageA-mappen hvor den definerer "typescript": "3.4.5" som en devDependency. Yarn installerer riktig versjon i PackageA-mappen, men det ser ikke ut til at den blir brukt.
Jeg er også ganske sikker på at Yarn resolutions heller ikke er det riktige verktøyet for denne situasjonen, siden pakkene mine ikke er definert som avhengigheter i min package.json.
snippet of package.json
"devDependenices: {
...,
"webpack": "^4.34.0",
"typescript": "3.5.0-rc",
"yarn": "^1.15.2"
},
"workspaces": {
"packages": [
"packages/*"
],
"nohoist": [
"packageA/typescript"
]
}
Hvis noen er nysgjerrige, må PackageA bruke TypeScript 3.4.5 fordi jeg trenger react-docgen-typescript for å analysere Prop-verdier som eksisterer på Propen og ikke på dens forelder (for eksempel vil HTML-attributter på en knapp vises som en prop). Her er en lenke til den saken.
Vennligst gi meg beskjed hvis det trengs mer informasjon om prosjektkonfigurasjonen min! Setter pris på innsikten og rådene :)
Svar #1
Ifølge dokumentasjonen må du legge til ** ved siden av pakkenavnet for å unngå at pakken flyttes. Dokumentasjonslenke her.
For kun å unngå flytting for TypeScript:
"workspaces": {
"packages": [
"packages/*"
],
"nohoist": [
"packageA/typescript/**"
]
}
For å unngå hoisting for TypeScript og dets avhengigheter også:
"workspaces": {
"packages": [
"packages/*"
],
"nohoist": [
"packageA/typescript/**/**"
]
}
