Module resolution med node
Det tok tre dager å få til bygg og serve av backend igjen, og det har lært meg følgende facts:
- Som utvikler setter man path aliases for å unnslippe
path hell– relative paths som må endres manuelt overalt hvis du flytter på ting (i tillegg til at lange relative paths er stygge å se på.) Vi vil haimport { foo } from 'bar/foo', ikkeimport { foo } from '../../../../../bar/foo'. - Du legger til path aliases i
tsconfig.jsonfor å få intellisense på de pathene. - Hvis du setter path aliases i
tsconfig.jsonmå du samtidig settebaseUrl, ellers funker det ikke. Du skal også settemoduleResolutiontilnode. - Byggescript, f. eks.
next buildresolver path aliases ut av boksen, men hvis du bruker bundler må path aliasene legges til bundler-configensresolve.aliasfor at bundleren skal klare å resolve dem. - Vi kjører appen i Node.js, som er et runtime environment for Javascript. Det første
nodegjør ved oppstart er å resolve alle imports og exports. Da er det slik atnodeikke har begrep om path aliases. Den må ha relative paths. Så hvis du bygger og bundler med Webpack og så prøver å serve mednode, så knekker det med vår venn,MODULE_NOT_FOUND. - Det fins ulike måter å løse det på, blant annet kan du kjøre noe som heter
tsc-aliasrett ettertscsom leser path aliases fratsconfig.json, går gjennom alle modulene dine og erstatter path aliases med relative paths i Javascript-outputen. - Har ikke sett IDE bemerke det, men “trailing commas” er ikke støttet i JSON. Kan føre til at verktøy som
tsc-aliasfeiler ved parsing avtsconfig.json.
