(▀̿Ĺ̯▀̿ ̿)

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 ha import { foo } from 'bar/foo', ikke import { foo } from '../../../../../bar/foo'.
  • Du legger til path aliases i tsconfig.json for å få intellisense på de pathene.
  • Hvis du setter path aliases i tsconfig.json må du samtidig sette baseUrl, ellers funker det ikke. Du skal også sette moduleResolution til node.
  • Byggescript, f. eks. next build resolver path aliases ut av boksen, men hvis du bruker bundler må path aliasene legges til bundler-configens resolve.alias for at bundleren skal klare å resolve dem.
  • Vi kjører appen i Node.js, som er et runtime environment for Javascript. Det første node gjør ved oppstart er å resolve alle imports og exports. Da er det slik at node ikke har begrep om path aliases. Den må ha relative paths. Så hvis du bygger og bundler med Webpack og så prøver å serve med node, 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-alias rett etter tsc som leser path aliases fra tsconfig.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-alias feiler ved parsing av tsconfig.json.