0

我有一个带有打字稿的节点项目,并且在我的 tsconfig.json 文件中配置了以下路径:

    "paths": {                                /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
      "@project/*": ["./../*"],
      "@*": ["./*"],
    },

我的配置文件位于 /project 文件夹,我的源位于 /project/src

它工作正常,它正确地将 @xxx/yyy 映射到 src/xxx/yyy 和 @project/package.json 到 /project/package.json

我正在尝试使用 ts-jest 实现相同的目标,我尝试在我的 jest.config.js 文件中使用以下 moduleNameMapper:

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  roots: ['<rootDir>/src/'],
  modulePathIgnorePatterns: ['<rootDir>/dist/', '<rootDir>/build/'],
  testMatch: ['**/*.spec.ts'],
  moduleNameMapper: {
    "^\@(.*)": "<rootDir>/src/$1",
  }
}

但我收到以下错误:

 FAIL  src/lib/error/BaseError.spec.ts
  ● Test suite failed to run

    Configuration error:

    Could not locate module @babel/code-frame mapped as:
    C:\data\devel\apps\sgte-it\coordinacion\juridicos\wspjn\src\babel/code-frame.

    Please check your configuration for these entries:
    {
      "moduleNameMapper": {
        "/^@(.*)/": "C:\data\devel\apps\sgte-it\coordinacion\juridicos\wspjn\src\$1"
      },
      "resolver": null
    }

      at createNoMappedModuleFoundError (node_modules/jest-resolve/build/index.js:501:17)

另一方面,如果我像这样映射 /src 中的每个文件夹:

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  roots: ['<rootDir>/src/'],
  modulePathIgnorePatterns: ['<rootDir>/dist/', '<rootDir>/build/'],
  testMatch: ['**/*.spec.ts'],
  moduleNameMapper: {
    "@db/(.*)": "<rootDir>/src/db/$1",
    "@lib/(.*)": "<rootDir>/src/lib/$1",
    "@modules/(.*)": "<rootDir>/src/modules/$1",
    "@services/(.*)": "<rootDir>/src/services/$1"
  }
}

它工作正常,但我必须用我添加的每个新根文件夹更新它。

有没有标准的、推荐的方法来实现这样的事情?我希望有一个特殊字符(在本例中为 @)指向我的 /src/ 文件夹。

还尝试将 '@' 替换为 '$' 但也有其他错误...

4

2 回答 2

1

我使它与以下配置一起工作。

    moduleNameMapper: {
        "^@/(.*)$": "<rootDir>/src/$1",
        "^@components/(.*)$": "<rootDir>/src/components/$1",
    },

这篇文章很有帮助。

就我而言,我想要映射@./src@components./src/components

于 2021-11-26T14:26:15.560 回答
1

我可以解决它,但不能用@符号解决,我必须使用$,此外,我必须将其转义并将其括在方括号中,如下所示:

tsconfig.json:

    "paths": {                                /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
      "$project/*": ["./../*"],
      "$*": ["./*"],
    },

jest.config.js:

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  roots: ['<rootDir>/src/'],
  modulePathIgnorePatterns: ['<rootDir>/dist/', '<rootDir>/build/'],
  testMatch: ['**/*.spec.ts'],
  moduleNameMapper: {
    "^[\$]project/(.*)": "<rootDir>/$1",
    "^[\$](.*)": "<rootDir>/src/$1",
  }
}

我希望它对其他人有用,配置所有这些小细节真的很痛苦......


该死的,我几乎可以正常工作了(ttsc 和 ts-jest 工作正常),但是 vscode 无法识别使用 '$' 映射的导入,但使用 '@' 可以正常工作......

于 2019-11-29T16:13:12.983 回答