首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ts-jest:将'@‘字符映射到/src文件夹

ts-jest:将'@‘字符映射到/src文件夹
EN

Stack Overflow用户
提问于 2019-11-29 23:58:05
回答 2查看 622关注 0票数 0

我有一个包含typescript的节点项目,并且在我的tsconfig.json文件中配置了以下路径:

代码语言:javascript
复制
    "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:

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

但我得到以下错误:

代码语言:javascript
复制
 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上的每个文件夹:

代码语言:javascript
复制
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/文件夹。

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

EN

回答 2

Stack Overflow用户

发布于 2021-11-26 14:26:16

我用下面的配置让它工作。

代码语言:javascript
复制
    moduleNameMapper: {
        "^@/(.*)$": "<rootDir>/src/$1",
        "^@components/(.*)$": "<rootDir>/src/components/$1",
    },

This article很有帮助。

在我的例子中,我希望将@映射到./src,将@components映射到./src/components

票数 1
EN

Stack Overflow用户

发布于 2019-11-30 00:13:13

我可以解决它,但不能用@符号,我必须使用$,更重要的是,我必须转义它并用方括号将它括起来,就像这样:

tsconfig.json:

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

jest.config.js:

代码语言:javascript
复制
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不能识别映射到'$‘的导入,但是可以使用'@’…

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59107929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档