fix(js): update outDir in runtime tsconfig files to match types export in package.json (#30217)

## Current Behavior

In the TS solution setup, several project generators produce the runtime
tsconfig files (e.g. `tsconfig.lib.json`) with the `outDir` set to
`out-tsc/<project name>`. This causes issues with the inferred
`typecheck` task because the project `package.json` has the `types`
export pointing to `dist/...`, which wouldn't be produced by
`typecheck`.

## Expected Behavior

In the TS solution setup, project generators should produce the runtime
tsconfig files (e.g. `tsconfig.lib.json`) with the `outDir` set to a
path (`dist`) that matches the value in the project `package.json`'s
`types` export.

## Related Issue(s)

Fixes #
This commit is contained in:
Leosvel Pérez Espinosa 2025-02-28 22:10:58 +01:00 committed by GitHub
parent b992e2586b
commit a5d20030db
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 35 additions and 40 deletions

View File

@ -400,9 +400,9 @@ describe('app', () => {
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"noUnusedLocals": false, "noUnusedLocals": false,
"outDir": "out-tsc/my-app", "outDir": "dist",
"rootDir": "src", "rootDir": "src",
"tsBuildInfoFile": "out-tsc/my-app/tsconfig.app.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.app.tsbuildinfo",
"types": [ "types": [
"node", "node",
], ],

View File

@ -552,9 +552,9 @@ describe('lib', () => {
"jsx": "react-jsx", "jsx": "react-jsx",
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"outDir": "out-tsc/my-lib", "outDir": "dist",
"rootDir": "src", "rootDir": "src",
"tsBuildInfoFile": "out-tsc/my-lib/tsconfig.lib.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo",
"types": [ "types": [
"node", "node",
], ],

View File

@ -265,9 +265,9 @@ describe('app', () => {
"compilerOptions": { "compilerOptions": {
"module": "nodenext", "module": "nodenext",
"moduleResolution": "nodenext", "moduleResolution": "nodenext",
"outDir": "out-tsc/myapp", "outDir": "dist",
"rootDir": "src", "rootDir": "src",
"tsBuildInfoFile": "out-tsc/myapp/tsconfig.app.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.app.tsbuildinfo",
"types": [ "types": [
"node", "node",
"express", "express",

View File

@ -1031,10 +1031,7 @@ function createProjectTsConfigs(
.map(([k, v]) => `${JSON.stringify(k)}: ${JSON.stringify(v)}`) .map(([k, v]) => `${JSON.stringify(k)}: ${JSON.stringify(v)}`)
.join(',\n '), .join(',\n '),
tmpl: '', tmpl: '',
outDir: outDir: 'dist',
options.bundler === 'tsc'
? 'dist'
: `out-tsc/${options.projectRoot.split('/').pop()}`,
emitDeclarationOnly: options.bundler === 'tsc' ? false : true, emitDeclarationOnly: options.bundler === 'tsc' ? false : true,
} }
); );

View File

@ -140,9 +140,7 @@ export function updateTsconfigFiles(
json.compilerOptions = { json.compilerOptions = {
...json.compilerOptions, ...json.compilerOptions,
// Make sure d.ts files from typecheck does not conflict with bundlers. outDir: 'dist',
// Other tooling like jest write to "out-tsc/jest" to we just default to "out-tsc/<project-name>".
outDir: joinPathFragments('out-tsc', projectRoot.split('/').at(-1)),
rootDir, rootDir,
...compilerOptions, ...compilerOptions,
}; };

View File

@ -281,10 +281,10 @@ describe('application generator', () => {
"experimentalDecorators": true, "experimentalDecorators": true,
"module": "nodenext", "module": "nodenext",
"moduleResolution": "nodenext", "moduleResolution": "nodenext",
"outDir": "out-tsc/myapp", "outDir": "dist",
"rootDir": "src", "rootDir": "src",
"target": "es2021", "target": "es2021",
"tsBuildInfoFile": "out-tsc/myapp/tsconfig.app.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.app.tsbuildinfo",
"types": [ "types": [
"node", "node",
], ],

View File

@ -981,7 +981,7 @@ describe('app (legacy)', () => {
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"noEmit": true, "noEmit": true,
"outDir": "out-tsc/myapp", "outDir": "dist",
"paths": { "paths": {
"@/*": [ "@/*": [
"./src/*", "./src/*",
@ -995,7 +995,7 @@ describe('app (legacy)', () => {
"resolveJsonModule": true, "resolveJsonModule": true,
"rootDir": "src", "rootDir": "src",
"strict": true, "strict": true,
"tsBuildInfoFile": "out-tsc/myapp/tsconfig.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo",
"types": [ "types": [
"jest", "jest",
"node", "node",

View File

@ -187,9 +187,9 @@ describe('next library', () => {
"jsx": "react-jsx", "jsx": "react-jsx",
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"outDir": "out-tsc/mylib", "outDir": "dist",
"rootDir": "src", "rootDir": "src",
"tsBuildInfoFile": "out-tsc/mylib/tsconfig.lib.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo",
"types": [ "types": [
"node", "node",
"@nx/react/typings/cssmodule.d.ts", "@nx/react/typings/cssmodule.d.ts",

View File

@ -667,9 +667,9 @@ describe('app', () => {
"compilerOptions": { "compilerOptions": {
"module": "nodenext", "module": "nodenext",
"moduleResolution": "nodenext", "moduleResolution": "nodenext",
"outDir": "out-tsc/myapp", "outDir": "dist",
"rootDir": "src", "rootDir": "src",
"tsBuildInfoFile": "out-tsc/myapp/tsconfig.app.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.app.tsbuildinfo",
"types": [ "types": [
"node", "node",
], ],

View File

@ -286,10 +286,10 @@ describe('app', () => {
"jsxImportSource": "vue", "jsxImportSource": "vue",
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"outDir": "out-tsc/myapp", "outDir": "dist",
"resolveJsonModule": true, "resolveJsonModule": true,
"rootDir": "src", "rootDir": "src",
"tsBuildInfoFile": "out-tsc/myapp/tsconfig.app.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.app.tsbuildinfo",
}, },
"exclude": [ "exclude": [
"out-tsc", "out-tsc",

View File

@ -326,9 +326,9 @@ describe('app', () => {
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"noUnusedLocals": false, "noUnusedLocals": false,
"outDir": "out-tsc/my-app", "outDir": "dist",
"rootDir": "src", "rootDir": "src",
"tsBuildInfoFile": "out-tsc/my-app/tsconfig.app.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.app.tsbuildinfo",
"types": [ "types": [
"node", "node",
], ],

View File

@ -525,9 +525,9 @@ describe('lib', () => {
"jsx": "react-jsx", "jsx": "react-jsx",
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"outDir": "out-tsc/my-lib", "outDir": "dist",
"rootDir": "src", "rootDir": "src",
"tsBuildInfoFile": "out-tsc/my-lib/tsconfig.lib.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo",
"types": [ "types": [
"node", "node",
], ],

View File

@ -1364,9 +1364,9 @@ describe('app', () => {
], ],
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"outDir": "out-tsc/myapp", "outDir": "dist",
"rootDir": "src", "rootDir": "src",
"tsBuildInfoFile": "out-tsc/myapp/tsconfig.app.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.app.tsbuildinfo",
"types": [ "types": [
"node", "node",
"@nx/react/typings/cssmodule.d.ts", "@nx/react/typings/cssmodule.d.ts",

View File

@ -509,9 +509,9 @@ describe('hostGenerator', () => {
], ],
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"outDir": "out-tsc/myapp", "outDir": "dist",
"rootDir": "src", "rootDir": "src",
"tsBuildInfoFile": "out-tsc/myapp/tsconfig.app.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.app.tsbuildinfo",
"types": [ "types": [
"node", "node",
"@nx/react/typings/cssmodule.d.ts", "@nx/react/typings/cssmodule.d.ts",

View File

@ -1052,9 +1052,9 @@ module.exports = withNx(
"jsx": "react-jsx", "jsx": "react-jsx",
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"outDir": "out-tsc/mylib", "outDir": "dist",
"rootDir": "src", "rootDir": "src",
"tsBuildInfoFile": "out-tsc/mylib/tsconfig.lib.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo",
"types": [ "types": [
"node", "node",
"@nx/react/typings/cssmodule.d.ts", "@nx/react/typings/cssmodule.d.ts",

View File

@ -548,7 +548,7 @@ describe('Remix Application', () => {
], ],
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"outDir": "out-tsc/myapp", "outDir": "dist",
"resolveJsonModule": true, "resolveJsonModule": true,
"rootDir": ".", "rootDir": ".",
"skipLibCheck": true, "skipLibCheck": true,

View File

@ -276,10 +276,10 @@ describe('application generator', () => {
"jsxImportSource": "vue", "jsxImportSource": "vue",
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"outDir": "out-tsc/test", "outDir": "dist",
"resolveJsonModule": true, "resolveJsonModule": true,
"rootDir": "src", "rootDir": "src",
"tsBuildInfoFile": "out-tsc/test/tsconfig.app.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.app.tsbuildinfo",
"types": [ "types": [
"vite/client", "vite/client",
], ],

View File

@ -606,10 +606,10 @@ module.exports = [
"jsxImportSource": "vue", "jsxImportSource": "vue",
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"outDir": "out-tsc/my-lib", "outDir": "dist",
"resolveJsonModule": true, "resolveJsonModule": true,
"rootDir": "src", "rootDir": "src",
"tsBuildInfoFile": "out-tsc/my-lib/tsconfig.lib.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo",
"types": [ "types": [
"vite/client", "vite/client",
], ],

View File

@ -801,9 +801,9 @@ describe('app', () => {
"compilerOptions": { "compilerOptions": {
"module": "esnext", "module": "esnext",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"outDir": "out-tsc/myapp", "outDir": "dist",
"rootDir": "src", "rootDir": "src",
"tsBuildInfoFile": "out-tsc/myapp/tsconfig.app.tsbuildinfo", "tsBuildInfoFile": "dist/tsconfig.app.tsbuildinfo",
"types": [ "types": [
"node", "node",
], ],