ts-node icon indicating copy to clipboard operation
ts-node copied to clipboard

ts-node doesn't resolve extended tsconfigs if they originate from the export fields of packages

Open ItamarGronich opened this issue 1 year ago • 1 comments

Search Terms

exports, package.json, tsconfig, extends, base config

Description

While tsc works and resolves the config files from the exports fields of the packages, ts-node fails.

Expected Behavior

ts-node finds and reads extended configs from an external package when they're defined in the packageJson.exports field.

Actual Behavior

ts-node fails to parse the config and exits with an error.

Minimal reproduction

Repro: https://github.com/TypeStrong/ts-node-repros/pull/39

This setup includes two packages @tsnode-exports/main a regular package and a @tsnode-exports/ts-config holding just the base tsconfig file.

in package ts-config the tsconfig file is in some internal folder and is exposed via the package.json field: exports

In package main we have a tsconfig with an extends that points to that tsconfig in the ts-config package.

Steps to reproduce the problem

  1. clone and checkout branch
  2. make sure you got the right node version (v20.11.0)
  3. run npm ci
  4. See how tsc builds successfully by running npm run tsc
  5. See how ts-node fails to build by running npm run ts-node

Specifications

  • ts-node version: v10.9.2
  • node version: v20.11.0
  • TypeScript version: v5.4.2
  • tsconfig.json, if you're using one: (in repro)
  • package.json: in repro
  • Operating system and version: MacOS Sonoma 14.3.1

ItamarGronich avatar Mar 18 '24 21:03 ItamarGronich

This is indeed problematic. Any project relying on ts-node, such as Nx, breaks in a pretty opaque way when working in a context where the tsconfig.json extends a config exposed through a dep's exports path, which is what we do at work for our centralized configs package.

Worried that this issue has been unacknowledged for 6+ months

porteneuve avatar Oct 11 '24 11:10 porteneuve