运行玩笑时打字稿路径无法解析?

Posted

技术标签:

【中文标题】运行玩笑时打字稿路径无法解析?【英文标题】:Typescript paths not resolving when running jest? 【发布时间】:2019-03-22 11:40:35 【问题描述】:

尝试使用these instructions 来开玩笑convert this project。除了使用paths 配置的文件之外,我一切正常:

"paths": 
      "@fs/*": ["./src/*"], 
      "@test/*": ["./test/*"]
    

看起来好像在运行测试时导入语句没有解析并记录下来:

Cannot find module '@fs/container/validation/ValidationContext' from 'Core.spec.ts'

  1 | import  ValidationOptions  from "@fs/container/validation/ValidationOptions";
> 2 | import  ValidationContext  from "@fs/container/validation/ValidationContext";
    | ^
  3 | import  ValidationContainer  from "@fs/container/validation/ValidationContainer";
  4 | 
  5 | import  Core1  from "@test/core/Core1";

  at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:221:17)
  at Object.<anonymous> (test/core/Core.spec.ts:2:1)

有没有办法让 jest/ts-jest 在解析导入时包含 @paths

【问题讨论】:

【参考方案1】:

jest 不能使用 tsconfig 的路径映射,因为它是 ts 编译器时间,所以 jest 配置应该有相应的模块名称映射器 (https://jestjs.io/docs/en/configuration.html#modulenamemapper-object-string-string) 来解析别名路径。

【讨论】:

【参考方案2】:

我想将以~/ 开头的模块paths 解析为我的&lt;baseUrl&gt;/&lt;moduleName&gt;

感谢OJ Kwon链接我解决了它(给他点)。

tsconfig.json

见module-resolution path-mapping doc


  "compilerOptions": 
    "baseUrl": "src",
    "paths": 
      "~/*": ["*"]
    
  ,

笑话配置

然后我们需要告诉jest 来解析路径。通过以下配置完成:

"moduleNameMapper": 
  "~/(.*)": "<rootDir>/src/$1"
,

【讨论】:

这对我帮助很大,我的 ts 路径是 "@data/*": ["src/data/*"] 然后在我开玩笑的配置中添加:'@data/(. *)': '/src/data/$1',【参考方案3】:

在根项目文件夹中添加 jest.config.js,内容如下。

const  pathsToModuleNameMapper  = require('ts-jest/utils')
const  compilerOptions  = require('./tsconfig')
module.exports = 
    preset: 'ts-jest',
    testEnvironment: 'node',
    moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths),
    modulePaths: [
        '<rootDir>'
    ],

【讨论】:

以上是关于运行玩笑时打字稿路径无法解析?的主要内容,如果未能解决你的问题,请参考以下文章

使用带有打字稿的 eslint - 无法解析模块的路径

打字稿无法解析导入中的非相对路径

Babel 模块解析器无法按预期工作(节点 + 打字稿)

带有打字稿的玩笑无法识别功能完成()

打字稿无法解析类型

我无法导入已发布的打字稿库,出现以下错误:“找不到模块:无法解析 'tqt' in ...”