CJS en ESM bouwen met TypeScript-projectreferenties in een monorepo
Ik heb een TypeScript-monorepo prototype opgezet en draaiend met CJS, Yarn-workspaces en projectreferenties met incrementele builds:
https://github.com/rosskevin/learn-a/tree/build-cjs-esm
Aangezien tsc -b de standaard tsconfig.json in elk project gebruikt en ze zijn ingesteld voor cjs, wil ik gewoon overrides via de opdrachtregel doorgeven:
yarn tsc -b --outDir lib/esm --module esnext --target esnext ✘ 127
yarn run v1.12.3
/Users/kross/projects/js/node_modules/.bin/tsc -b --outDir lib/esm --module esnext --target esnext
error TS5072: Unknown build option '--outDir'.
error TS5072: Unknown build option '--module'.
error TS5072: Unknown build option '--target'.
error Command failed with exit code 1.
Wat is de beste manier om zowel een cjs- als een esm-build te krijgen voor een TypeScript-project met projectverwijzingen?
Antwoord #1
De enige manier om voor beide doelen te bouwen (waar mogelijk incrementeel te gebruiken) is om incrementele builds uit te voeren voor cjs tsc -b en niet-incrementeel (het lijkt erop) voor elk van de andere projecten.
Dit werkt momenteel:
"build": "tsc -b",
"build:esm": "lerna exec --stream --parallel -- ../../node_modules/.bin/tsc --outDir lib/esm --module esnext --target esnext",
Hier is de prototype-repository:
https://github.com/rosskevin/learn-a
Antwoord #2
Op https://www.typescriptlang.org/docs/handbook/compiler-options.html
-b --build
Bouwt dit project en al zijn afhankelijkheden die zijn gespecificeerd door Projectreferenties. Let op: deze vlag is niet compatibel met andere op deze pagina. Zie hier voor meer informatie https://www.typescriptlang.org/docs/handbook/project-references.html
