modules
Files under @repobuddy/typescript/tsconfig/modules/ match the
Modules category of the TSConfig reference. Extend one module
file per config.
| File | module |
moduleResolution |
Other options |
|---|---|---|---|
modules/buddy |
Node16 |
derived: node16 |
resolveJsonModule |
modules/buddy-commonjs |
CommonJS |
not set | esModuleInterop, resolveJsonModule, verbatimModuleSyntax: false |
modules/node16 |
Node16 |
derived: node16 |
none |
modules/nodenext |
NodeNext |
derived: nodenext |
none |
modules/commonjs |
CommonJS |
not set | none |
modules/commonjs-legacy |
CommonJS |
Node16 |
none |
modules/es2020 |
ES2020 |
Bundler |
none |
modules/es2020-legacy |
ES2020 |
Node |
none |
modules/es2022 |
ES2022 |
Bundler |
none |
modules/ui-assets |
not set | not set | allowArbitraryExtensions, resolveJsonModule |
“Derived” values come from tsc --showConfig (TypeScript 7.0.2). The file does not set them.
modules/buddy
Section titled “modules/buddy”The recommended module settings for a Node.js package. Used by
tsconfig/monorepo.
{ "compilerOptions": { "module": "Node16", "resolveJsonModule": true // disabled due to `ts-jest` issue. // "verbatimModuleSyntax": true }}Resolved options (tsc --showConfig, TypeScript 7.0.2):
{ "compilerOptions": { "module": "node16", "resolveJsonModule": true, "moduleResolution": "node16", "moduleDetection": "force" }}verbatimModuleSyntax stays off. With it on, ts-jest reports
TS1286: ESM syntax is not allowed in a CommonJS module for ESM projects.
modules/buddy-commonjs
Section titled “modules/buddy-commonjs”The CommonJS counterpart of modules/buddy. Put it after your base config in an extends array to build a CommonJS
copy of an ESM package.
{ "compilerOptions": { "esModuleInterop": true, "module": "CommonJS", "resolveJsonModule": true, "verbatimModuleSyntax": false // reset to false for config composition }}verbatimModuleSyntax: false overrides a true value from a config earlier in the extends array.
This repository builds packages/jest and packages/buddy CommonJS output with it. See
Build CommonJS and ESM from one package.
modules/node16
Section titled “modules/node16”{ "compilerOptions": { "module": "Node16" // This is inferred for `module: Node16` // "moduleResolution": "Node16" }}TypeScript derives moduleResolution: node16 and moduleDetection: force. Unlike modules/buddy, this file does not
turn on resolveJsonModule.
modules/nodenext
Section titled “modules/nodenext”{ "compilerOptions": { "module": "NodeNext" // This is inferred for `module: NodeNext` // "moduleResolution": "NodeNext" }}TypeScript derives moduleResolution: nodenext and moduleDetection: force.
modules/commonjs
Section titled “modules/commonjs”{ "compilerOptions": { "module": "CommonJS" // this is no longer possible starting from TypeScript 5.2 // "moduleResolution": "Node16" }}moduleResolution is left to TypeScript’s default for CommonJS.
modules/commonjs-legacy
Section titled “modules/commonjs-legacy”{ "compilerOptions": { "module": "CommonJS", "moduleResolution": "Node16" }}For TypeScript older than 5.2. TypeScript 6.0.3 and 7.0.2 reject it with TS5110: Option 'module' must be set to 'Node16' when option 'moduleResolution' is set to 'Node16'. On those versions, use
modules/commonjs.
modules/es2020
Section titled “modules/es2020”For code that a bundler consumes.
{ "compilerOptions": { "module": "ES2020", "moduleResolution": "Bundler" }}moduleResolution: Bundler needs TypeScript 5.0 or later.
modules/es2020-legacy
Section titled “modules/es2020-legacy”{ "compilerOptions": { "module": "ES2020", "moduleResolution": "Node" }}For TypeScript older than 5.0, which has no Bundler resolution. TypeScript 6.0.3 reports TS5107
(moduleResolution=node10 is deprecated) and TypeScript 7.0.2 reports TS5108 (moduleResolution=node10 has been
removed). On those versions, use modules/es2020.
modules/es2022
Section titled “modules/es2022”For code that a bundler consumes, with ES2022 module features such as top-level await.
{ "compilerOptions": { "module": "ES2022", "moduleResolution": "Bundler" }}modules/ui-assets
Section titled “modules/ui-assets”Lets code import JSON files and files with non-TypeScript extensions, such as .css, when a matching declaration file
exists (for example styles.d.css.ts for styles.css).
{ "compilerOptions": { // https://www.typescriptlang.org/tsconfig#allowArbitraryExtensions "allowArbitraryExtensions": true, "resolveJsonModule": true }}It sets no module. Combine it with one of the module files above. allowArbitraryExtensions needs TypeScript 5.0
or later.