运行玩笑时打字稿路径无法解析?
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 解析为我的<baseUrl>/<moduleName>
。
感谢OJ Kwon链接我解决了它(给他点)。
tsconfig.json
见module-resolution path-mapping doc
"compilerOptions":
"baseUrl": "src",
"paths":
"~/*": ["*"]
,
笑话配置
然后我们需要告诉jest
来解析路径。通过以下配置完成:
"moduleNameMapper":
"~/(.*)": "<rootDir>/src/$1"
,
【讨论】:
这对我帮助很大,我的 ts 路径是 "@data/*": ["src/data/*"] 然后在我开玩笑的配置中添加:'@data/(. *)': '在根项目文件夹中添加 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>'
],
【讨论】:
以上是关于运行玩笑时打字稿路径无法解析?的主要内容,如果未能解决你的问题,请参考以下文章