cjs და esm-ის შექმნა TypeScript პროექტის რეფერენციებით მონორეპოში


მე მაქვს TypeScript მონორეპოს პროტოტიპი დაყენებული და მუშაობს cjs, yarn სამუშაო სივრცეებით და პროექტის რეფერენციებით ინკრემენტული აშენებებით:

https://github.com/rosskevin/learn-a/tree/build-cjs-esm

მაშინ როცა tsc -b იყენებს სტანდარტულ tsconfig.json-ს თითოეულ პროექტში და ისინი ყოველთვის cjs-ისთვის არიან გაწყობილი, მსურს უბრალოდ გადავცე გადატვირთვები command line-ის საშუალებით:

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.

რა არის საუკეთესო გზა იმისათვის, რომ მიიღოთ როგორც CJS, ასევე ESM ბილდი ტაიპსქრიპტის პროექტისთვის, რომელიც იყენებს პროექტების რეფერენციებს?

უპასუხე #1

ერთდროულად ორივე მიზნისთვის (შესაძლებლობის შემთხვევაში ინკრემენტალური გამოყენებით) შენარჩუნების ერთადერთ გზაა, ინკრემენტალები შესრულდეს cjs-ისთვის tsc -b და არასაინკრემენტალო (თითქმის) თითოეული სხვა პროექტისთვის.

ეს ამჟამად მუშაობს:

"build": "tsc -b",
"build:esm": "lerna exec --stream --parallel -- ../../node_modules/.bin/tsc --outDir lib/esm --module esnext --target esnext",

აქ არის პროტოტიპის რეპო:

https://github.com/rosskevin/learn-a

პასუხი #2

მისამართზე https://www.typescriptlang.org/docs/handbook/compiler-options.html

-b --შექმნა

აშენებს ამ პროექტს და მის ყველა დამოკიდებულებას, რომელიც მითითებულია პროექტის მითითებით. გაითვალისწინეთ, რომ ეს დროშა არ არის თავსებადი ამ გვერდის სხვებთან. იხილეთ მეტი აქ https://www.typescriptlang.org/docs/handbook/project-references.html