jestjs / jest

Delightful JavaScript Testing.
https://jestjs.io
MIT License
44.21k stars 6.46k forks source link

[Feature]: extensionAlias support #15354

Open sibelius opened 3 days ago

sibelius commented 3 days ago

🚀 Feature Proposal

Similar to webpack/rpsack extensionAlias

https://webpack.js.org/configuration/resolve/#resolveextensionalias

https://github.com/webpack/webpack/issues/13252#issuecomment-1824282100

Be able to resolve import "myFile.js" to myFile.ts, to enable ESM

Motivation

ESM requires file extensions, so we need to import using .js, but this breaks jest that it is looking for .ts file instead

Example

import "myFile.js" to myFile.ts, to enable ESM

Pitch

solve another ESM problem and make module resolution faster

/** @type {import("next").NextConfig} */
const nextConfig = {
  experimental: {
    // Remove .js from import specifiers, because
    // Next.js and webpack do not yet support
    // TypeScript-style module resolution out of the box
    // https://github.com/webpack/webpack/issues/13252#issuecomment-1171080020
    // https://github.com/vercel/next.js/pull/45423
    // https://github.com/vercel/next.js/issues/58805
    // https://github.com/vercel/next.js/issues/54550
    extensionAlias: {
      '.js': ['.ts', '.tsx', '.js', '.jsx'],
      '.jsx': ['.tsx', '.jsx'],
      '.mjs': ['.mts', '.mjs'],
      '.cjs': ['.cts', '.cjs'],
    },
  },
}
karlhorky commented 3 days ago

Alternative

Hey @sibelius ! 👋 Long time no see, hope everything's good with you.

Considering that part of the TypeScript 5.7+ ecosystem is moving to fully-specified import specifiers with *.ts* extensions (motivated by Node.js type stripping), would allowImportingTsExtensions from TypeScript 5.0 with .ts file extensions work for you?

I wrote a bit in a similar issue over here: