我有一个带有打字稿的节点项目,并且在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 /文件夹。
也尝试将'@'替换为'$',但也有其他错误...
答案 0 :(得分:0)
我可以解决它,但不能使用@
符号,我必须使用$
,而且必须将其转义并用方括号括起来,如下所示:
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不能识别映射为'$'的导入,但是可以很好地使用'@'...