Description
🐛 Bug Report
In a project using TypeScript, Jest and setup as ESM (the output of the transpiler is ESM so Node will run ESM instead of CJS) JEST is failing with ts-node 10 but works with ts-node 9.
Error:
Error: Jest: Failed to parse the TypeScript config file /projects/ts-jest-ts-node-10/jest.config.ts
Error: Must use import to load ES Module: /projects/ts-jest-ts-node-10/jest.config.ts
require() of ES modules is not supported.
require() of /projects/ts-jest-ts-node-10/jest.config.ts from /projects/ts-jest-ts-node-10/node_modules/ts-node/dist/index.js is an ES module file as it is a .ts file whose nearest parent package.json contains "type": "module" which defines all .ts files in that package scope as ES modules.
Instead change the requiring code to use import(), or remove "type": "module" from /projects/ts-jest-ts-node-10/package.json.
at readConfigFileAndSetRootDir (/projects/ts-jest-ts-node-10/node_modules/jest-config/build/readConfigFileAndSetRootDir.js:118:13)
at readConfig (/projects/ts-jest-ts-node-10/node_modules/jest-config/build/index.js:216:18)
at readConfigs (/projects/ts-jest-ts-node-10/node_modules/jest-config/build/index.js:405:26)
at runCLI (/projects/ts-jest-ts-node-10/node_modules/@jest/core/build/cli/index.js:220:59)
at Object.run (/projects/ts-jest-ts-node-10/node_modules/jest-cli/build/cli/index.js:163:37)
error Command failed with exit code 1
To Reproduce
Steps to reproduce the behavior:
- Create a new folder
- Run npm init -y
- Run
npm i -D ts-node typescript jest
- Add
"type": "module"
to your package.json - Create a jest.config.ts file with the content below:
import type { Config } from '@jest/types';
const config: Config.InitialOptions = {
verbose: true
};
export default config;
- Run
npx jest
Expected behavior
The config file should be loaded.
Link to repl or repo (highly encouraged)
I have reproduced the issue in a StackBlitz:
- ts-node 9: https://stackblitz.com/edit/ts-jest-ts-node-9
- ts-node 10: https://stackblitz.com/edit/ts-jest-ts-node-10
In order to run the code please run npm test
in the console and the error above will be raised.
Both projects are identical aside from the ts-node version.
Keep in mind that this project is using StackBlitz WebContainers and Turbo package manager (which is not NPM, though it have an alias) if you want to tweak my example but not go to learn about specifics about Turbo or WebContainers it may be better to just clone the repo.
envinfo
This is my local environment:
System:
OS: macOS 11.3.1
CPU: (12) x64 Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
Binaries:
Node: 16.2.0 - ~/.nvm/versions/node/v16.2.0/bin/node
Yarn: 1.22.10 - ~/.nvm/versions/node/v16.2.0/bin/yarn
npm: 7.14.0 - ~/.nvm/versions/node/v16.2.0/bin/npm
npmPackages:
jest: ^27.0.1 => 27.0.1