Zoeken op website

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