node.js - Varför respekterar inte VS Code TypeScript-sökvägar?
I mitt TypeScript-projekt som kör tester via ts-node och jasmine har jag definierat några sökvägar i tsconfig.json
{
"compilerOptions": {
"baseUrl": "src",
"target": "es5",
"module": "commonjs",
"lib": [
"es5",
"es2015",
"DOM"
],
"moduleResolution": "Node",
"outDir": "./dist/cjs",
"declaration": true,
"sourceMap": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"noImplicitAny": false,
"removeComments": true,
"strict": true,
"paths": {
"@common": ["common/index"],
"@crashes": ["crashes/index"]
}
},
"files": [
"./src/index.ts"
]
}
Jag kan importera via vägarna @common och @crashes i min produktionskod, men av någon anledning ger VS Code mig felet Cannot find module '@common' or its corresponding type declarations. i mina spec.ts-filer.
Hur kan jag få VS Code att känna igen TypeScript-sökvägar i mina tester?
Svar #1
Detta beror på att VS Codes intellisense följer reglerna i tsconfig.json. I det här fallet inkluderade jag inte spec.ts-filerna i TypeScript-kompileringen. Dessutom ville jag inte inkludera TypeScript-filerna i mitt projekts byggutdata.
Lösningen var som följer:
- Ta bort
files-egenskapen fråntsconfig.json - Introducera en ny
tsconfig.dist.jsonsom utökartsconfig.jsonoch lägg tillfiles-egenskapen här
{
"extends": "./tsconfig.json",
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"outDir": "./dist/cjs",
},
"files": [
"./src/index.ts"
]
}
- Använd den nya
tsconfig.dist.jsoni publiceringsskriptet
Dessutom, när jag hade gjort allt detta fick jag följande fel när jag försökte köra jasmine-tester med ts-node:
> ts-node node_modules/jasmine/bin/jasmine --config=spec/support/jasmine.spec.json
Error: Cannot find module '@common'
Lösningen på detta fel var att installera tsconfig-paths och uppdatera mitt test-skript i package.json
{
"scripts": {
"test": "ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine --config=spec/support/jasmine.spec.json"
}
}
