angular - Hvordan tvinge npm til å flate ut avhengigheter?


Jeg har et prosjekt der flere frontend deler et felles bibliotek.

Modulavhengighetene til disse prosjektene blir administrert av npm.

Så, i package.json for hvert av disse prosjektene har jeg :

  "dependencies": {
    "mylib": "file:../<...path...>/mylib",
    ...other deps...
  },

Jeg bruker «mylib» til to formål:

  • del noen timer ;
  • dele vanlige avhengigheter (for det meste, angular)

Inntil nå brukte jeg npm 3.3.12, og etter å ha kjørt npm install, var Angular-avhengighetene til mylib rett under node_modules-katalogen til mine øverste prosjekter.

Så jeg hadde for eksempel

node_modules
    @angular
        core
        common
        ....
    mylib

Nå, med npm 5.4.2, har jeg :

node_modules
    mylib
        node_modules
            @angular
                core
                common

Dette forårsaker mange problemer i byggeprosessen min. Det krever ekstra konfigurasjon av TypeScript, ved å legge til direktiver som:

"baseUrl": "",
"paths": {
    "@angular/common": ["node_modules/mylib/node_modules/@angular/common/"],
    "@angular/core": ["node_modules/mylib/node_modules/@angular/core/"],
    "@angular/compiler": ["node_modules/mylib/node_modules/@angular/compiler/"],
    "@angular/compiler-cli": ["node_modules/mylib/node_modules/@angular/compiler-cli/"],
    "@angular/forms": ["node_modules/mylib/node_modules/@angular/forms/"],
    "@angular/http": ["node_modules/mylib/node_modules/@angular/http/"],
    "@angular/platform-browser": ["node_modules/mylib/node_modules/@angular/platform-browser/"],
    "@angular/platform-browser/animations": ["node_modules/mylib/node_modules/@angular/platform-browser/animations/"],
    "@angular/platform-browser-dynamic": ["node_modules/mylib/node_modules/@angular/platform-browser-dynamic/"],
    "@angular/router": ["node_modules/mylib/node_modules/@angular/router/"],
    "primeng/primeng": ["node_modules/mylib/node_modules/primeng/primeng"],
    "rxjs/Rx": ["node_modules/mylib/node_modules/rxjs/Rx"]
    }

i tsconfig.json

Det blir virkelig irriterende når du må gjøre lignende konfigurasjoner for AOT, rollup osv...

Jeg prøvde å bruke npm dedupe for å forenkle dette. Siden prosjektene har mange avhengigheter, tar det over 10 minutter for bare én av dem :

npm dedupe
...
...
removed 824 packages and moved 1020 packages in 623.196s

Finnes det en standard, effektiv måte å ha samme type avhengighetsflating som før? npm dedupe gjør jobben, men tar så mye tid at det ikke er et akseptabelt alternativ.

Svar #1

Som et alternativ til npm kan du vurdere å bytte til å bruke yarn. Det bør rydde opp i moduler som standard. Start med å fjerne din eksisterende node_modules-mappe, og gjør deretter bare yarn install.

Du kan også tvinge yarn til å gjøre en flat installasjon (yarn install --flat), men i dette tilfellet kan det være tilstrekkelig bare å gjøre den vanlige installasjonen.

Legg til yarn.lock-filen i versjonskontrollen, og enhver annen utsjekking vil da være låst til de samme modulversjonene (med mindre de gjør yarn upgrade).

Relaterte artikler