Skip to content

Error: Source file not found #286

@ocavue

Description

@ocavue

Reproduction link or steps

  1. Clone https://github.com/issueset/tsdown-composite-build-issue and install
  2. If I run tsdown directly, I will get the following error:
$ rm -rf dist; pnpm run build:tsdown

> tsdown-composite@1.0.0 build:tsdown /private/tmp/tsdown-composite
> tsdown

ℹ tsdown v0.12.5 powered by rolldown v1.0.0-beta.10-commit.87188ed
ℹ Using tsdown config: /private/tmp/tsdown-composite/tsdown.config.ts
ℹ entry: src/dom/dom.ts, src/node/node.ts
ℹ tsconfig: tsconfig.json
ℹ Build start

  ERROR  Error: Build failed with 2 errors:

[plugin rolldown-plugin-dts:generate]
Error: Source file not found: /private/tmp/tsdown-composite/src/dom/dom.ts
    at createTsProgram (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown-plugin-dts@0.13.6_rolldown@1.0.0-beta.10-commit.87188ed_typescript@5.8.3/node_modules/rolldown-plugin-dts/dist/tsc-yr4fe8f_.js:93:25)
    at createOrGetTsModule (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown-plugin-dts@0.13.6_rolldown@1.0.0-beta.10-commit.87188ed_typescript@5.8.3/node_modules/rolldown-plugin-dts/dist/tsc-yr4fe8f_.js:72:17)
    at tscEmit (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown-plugin-dts@0.13.6_rolldown@1.0.0-beta.10-commit.87188ed_typescript@5.8.3/node_modules/rolldown-plugin-dts/dist/tsc-yr4fe8f_.js:100:17)
    at PluginContextImpl.handler (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown-plugin-dts@0.13.6_rolldown@1.0.0-beta.10-commit.87188ed_typescript@5.8.3/node_modules/rolldown-plugin-dts/dist/index.js:744:20)
    at plugin (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown@1.0.0-beta.10-commit.87188ed/node_modules/rolldown/dist/shared/src-euELSICh.mjs:2748:30)
    at plugin.<computed> (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown@1.0.0-beta.10-commit.87188ed/node_modules/rolldown/dist/shared/src-euELSICh.mjs:3538:18)
[plugin rolldown-plugin-dts:generate]
Error: Source file not found: /private/tmp/tsdown-composite/src/node/node.ts
    at createTsProgram (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown-plugin-dts@0.13.6_rolldown@1.0.0-beta.10-commit.87188ed_typescript@5.8.3/node_modules/rolldown-plugin-dts/dist/tsc-yr4fe8f_.js:93:25)
    at createOrGetTsModule (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown-plugin-dts@0.13.6_rolldown@1.0.0-beta.10-commit.87188ed_typescript@5.8.3/node_modules/rolldown-plugin-dts/dist/tsc-yr4fe8f_.js:72:17)
    at tscEmit (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown-plugin-dts@0.13.6_rolldown@1.0.0-beta.10-commit.87188ed_typescript@5.8.3/node_modules/rolldown-plugin-dts/dist/tsc-yr4fe8f_.js:100:17)
    at PluginContextImpl.handler (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown-plugin-dts@0.13.6_rolldown@1.0.0-beta.10-commit.87188ed_typescript@5.8.3/node_modules/rolldown-plugin-dts/dist/index.js:744:20)
    at plugin (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown@1.0.0-beta.10-commit.87188ed/node_modules/rolldown/dist/shared/src-euELSICh.mjs:2748:30)
    at plugin.<computed> (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown@1.0.0-beta.10-commit.87188ed/node_modules/rolldown/dist/shared/src-euELSICh.mjs:3538:18)
    at normalizeErrors (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown@1.0.0-beta.10-commit.87188ed/node_modules/rolldown/dist/shared/src-euELSICh.mjs:2218:18)
    at handleOutputErrors (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown@1.0.0-beta.10-commit.87188ed/node_modules/rolldown/dist/shared/src-euELSICh.mjs:3148:34)
    at transformToRollupOutput (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown@1.0.0-beta.10-commit.87188ed/node_modules/rolldown/dist/shared/src-euELSICh.mjs:3142:2)
    at RolldownBuild.write (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown@1.0.0-beta.10-commit.87188ed/node_modules/rolldown/dist/shared/src-euELSICh.mjs:4292:10)
    at async build (file:///private/tmp/tsdown-composite/node_modules/.pnpm/rolldown@1.0.0-beta.10-commit.87188ed/node_modules/rolldown/dist/shared/src-euELSICh.mjs:4330:22)
    at async file:///private/tmp/tsdown-composite/node_modules/.pnpm/tsdown@0.12.5_typescript@5.8.3/node_modules/tsdown/dist/index.js:837:24
    at async Promise.all (index 0)
    at async rebuild (file:///private/tmp/tsdown-composite/node_modules/.pnpm/tsdown@0.12.5_typescript@5.8.3/node_modules/tsdown/dist/index.js:830:3)
    at async buildSingle (file:///private/tmp/tsdown-composite/node_modules/.pnpm/tsdown@0.12.5_typescript@5.8.3/node_modules/tsdown/dist/index.js:820:2)
    at async Promise.all (index 0)
    at async build (file:///private/tmp/tsdown-composite/node_modules/.pnpm/tsdown@0.12.5_typescript@5.8.3/node_modules/tsdown/dist/index.js:792:19)
    at async CAC.<anonymous> (file:///private/tmp/tsdown-composite/node_modules/.pnpm/tsdown@0.12.5_typescript@5.8.3/node_modules/tsdown/dist/run.js:22:2)
    at async runCLI (file:///private/tmp/tsdown-composite/node_modules/.pnpm/tsdown@0.12.5_typescript@5.8.3/node_modules/tsdown/dist/run.js:40:3) {
  errors: [Getter/Setter]
}

 ELIFECYCLE  Command failed with exit code 1.
  1. If I run tsc --build firstly, then running tsdown is fine:
$ rm -rf dist; pnpm run build:tsc; pnpm run build:tsdown

> tsdown-composite@1.0.0 build:tsc /private/tmp/tsdown-composite
> tsc --build .


> tsdown-composite@1.0.0 build:tsdown /private/tmp/tsdown-composite
> tsdown

ℹ tsdown v0.12.5 powered by rolldown v1.0.0-beta.10-commit.87188ed
ℹ Using tsdown config: /private/tmp/tsdown-composite/tsdown.config.ts
ℹ entry: src/dom/dom.ts, src/node/node.ts
ℹ tsconfig: tsconfig.json
ℹ Build start
ℹ dist/dist_tsdown/node/node.js    0.17 kB │ gzip: 0.15 kB
ℹ dist/dist_tsdown/dom/dom.js      0.16 kB │ gzip: 0.15 kB
ℹ dist/dist_tsdown/dom/dom.d.ts    0.01 kB │ gzip: 0.03 kB
ℹ dist/dist_tsdown/node/node.d.ts  0.01 kB │ gzip: 0.03 kB
ℹ 4 files, total: 0.35 kB
✔ Build complete in 323ms

What is expected?

No error.

What is actually happening?

Error shown as above.

Any additional comments?

The repo above has 3 different tsconfig files:

  • tsconfig.dom.json: Only includes .ts files under src/dom/. It ensures that all files under src/dom/ don't use Node.js types.
  • tsconfig.node.json: Only includes .ts files under src/node/. It ensures that all files under src/node/ don't use browser types.
  • tsconfig.json: A root tsconfig.json that uses references to includes other two tsconfig files.

This a good pattern for a large TypeScript project. It improves both type checking soundness and also the performance (e.g., tsc doesn't need to re-compile src/dom/ if only src/node/ get changed`)

Metadata

Metadata

Assignees

No one assigned

    Type

    Priority

    None yet

    Effort

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions