moduleNameMapper 可以忽略 node_modules 中模块的导入吗?

rbu*_*era 3 node.js sendgrid typescript jestjs ts-jest

如何让moduleNameMapper忽略在我的目录中声明的导入node_modules

我有一个moduleNameMapper条目可以查找src/(.*)并将其翻译为<rootDir>/src/$1.

然而,我的依赖项之一(@sendgrid/mail)碰巧使用了以 开头的导入./src/,并且在将它们导入 Jest 时它们会中断。

笑话配置:

module.exports = {
    "testEnvironment": "node",
    "collectCoverage": true,
    "moduleFileExtensions": ["js", "json", "ts"],
    "roots": ["src"],
    "testRegex": ".spec.ts$",
    "coverageDirectory": "../coverage",
    "moduleDirectories": ["node_modules", "src"],
    "clearMocks": true,
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "moduleNameMapper": {
      "src/(.*)": "<rootDir>/src/$1"
    },
    "collectCoverageFrom": [
      "**/*.{js,jsx,ts,tsx}",
      "!**/*.entity.ts",
      "!**/*.dto.ts",
      "!**/*.module.ts"
    ]
  }
Run Code Online (Sandbox Code Playgroud)

rbu*_*era 5

事实证明,src/*您可以使用以下选项,而不是使用 moduleNameMapper 来获得绝对导入moduleDirectories

// jest.config.js

const path = require("path")

module.exports = {
    "testEnvironment": "node",
    "collectCoverage": true,
    "moduleFileExtensions": ["js", "json", "ts"],
    "roots": ["src"],
    "testRegex": ".spec.ts$",
    "coverageDirectory": "../coverage",
    "moduleDirectories": ["node_modules", "src", __dirname], // <--- HERE!!!!
    "clearMocks": true,
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.{js,jsx,ts,tsx}",
      "!**/*.entity.ts",
      "!**/*.dto.ts",
      "!**/*.module.ts"
    ]
  }

Run Code Online (Sandbox Code Playgroud)