Skip to content

subpath imports should play well with project referencesΒ #62880

@valler

Description

@valler

πŸ”Ž Search Terms

tsconfig, resolve, package, imports, module, references

πŸ•— Version & Regression Information

5.9.3

TS project refererences in combination with subpath imports mapping to installed packages break Node.js projects.

⏯ Playground Link

No response

πŸ’» Code

// @scope/alice/src/index.ts
import "@scope/bob/module"; // ok
import "#bob/module"; // breaks
// @scope/alice/tsconfig.json
{
  "files": [],
  "include": [],
  "references": { "path": "./tsconfig.other.json" }
}
// @scope/alice/tsconfig.other.json
// appears in the error message, but its content should be irrelevant, given
// that @scope/bob/module imports work.
{
  "compilerOptions": 
  {
    "composite": true,
    // ...
  },
  "files": [
    // whatever, except for files from node_modules, therefore excluding @scope/bob
  ],
}
{
  "// package.json": "",
  "name": "@scope/alice",
  "type": "module",
  "imports": {
    "#bob/*": "@scope/bob/*"
  },
  "dependencies": {
    "@scope/bob": "*"
  },
  "// ...": ""
}
tsc --build --noEmit

πŸ™ Actual behavior

An error of this kind:

src/index.ts:3:8 - error TS6307: File '/absolute/path/to/mono-repo/packages/bob/src/module/index.ts' is not listed within the file list of project '/absolute/path/to/mono-repo/packages/alice/tsconfig.other.json'. Projects must list all files or use an 'include' pattern.
  File is ECMAScript module because '/absolute/path/to/mono-repo/packages/bob/package.json' has field "type" with value "module"

import "#bob/module"; // breaks
       ~~~~~~~~~~~~~

πŸ™‚ Expected behavior

Should build just fine, since subpath imports are nothing but a string rewriting mechanism (think: URL shortener). TSC should recognize that #bob/* refers to the modules in the external package @scope/bob/* from within node_modules, rather than treating it as project internal.

Additional information about the issue

This can't be reproduced on the playground. I am willing to setup a repro repo, if the code in this issue is not sufficient to figure out what's going on.

Metadata

Metadata

Assignees

Labels

Needs InvestigationThis issue needs a team member to investigate its status.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions