扩展名为. js的TypeScript Jest导入导致错误:找不到模块

ssm49v7z  于 2023-02-10  发布在  TypeScript
关注(0)|答案(2)|浏览(285)

我在尝试解决此问题时遇到了死胡同。我正在使用以下TypeScript配置:

{
    "compilerOptions": {
        "module": "es2022",
        "moduleResolution": "nodenext",
        "target": "es2017",
        "esModuleInterop": true,
        "forceConsistentCasingInFileNames": true,
        "strict": true,
        "skipLibCheck": true,
        "noImplicitAny": true,
        "outDir": "./dist",
        "rootDir": "./src",
        "typeRoots": [
            "./src/types", "./node_modules/@types"],
        "allowJs": true,
        "strictFunctionTypes": true,
        "noImplicitReturns": true
    },
    "include": ["./src/**/*"],
    "exclude": ["node_modules"],
    "ts-node": {
        "esm": true,
        "experimentalSpecifierResolution": true
    }
}

如您所见,moduleResolution设置为nodenext,因此我必须在导入时显式添加文件扩展名,如下所示:import ServerError from '../models/Errors/ServerError.js';。否则,我会得到一个错误,即未找到该模块。
一切正常,但是当我启动测试时,我得到一个错误:Cannot find module '../models/Errors/ServerError.js' from '../src/services/usersService.ts'。基本上,jest尝试查找文件ServerError.js,但该文件不存在,因为所有文件的扩展名都是.ts,所以应该是ServerError.ts。如果我尝试在文件中将.js更改为.ts,也会收到错误。
因为这个问题我不能完成我的任务,所以我将感谢任何帮助。

soat7uwm

soat7uwm1#

最后,在做了一些研究并更新了jest配置文件之后,我设法解决了这个问题。

/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
import type { Config } from 'jest';

const config: Config = {
    transform: {
        '\\.[jt]sx?$': 'ts-jest'
    },
    globals: {
        'ts-jest': {
            useESM: true
        }
    },
    moduleNameMapper: {
        '(.+)\\.js': '$1'
    },
    extensionsToTreatAsEsm: ['.ts']
};

有了这个配置,一切都很好。我希望它能对一些人有所帮助。

55ooxyrt

55ooxyrt2#

我通过在jest.config.json中添加一个配置moduleFileExtensions设置来解决这个问题;

{
    ....
    "moduleFileExtensions": ["ts", "js"],
    ....
}

相关问题