Hur man importerar ett repo med okompilerad TypeScript i Angular 5+ (och exkluderar .spec.ts-filer)
En senaste uppgradering till Angular 5.x tillåter inte okompilerad TypeScript att importera från ett node_modules-repo. Det verkar som att lösningen är att inkludera .ts-filerna med tsconfig.json via "include": ["node_modules/example/**/*.ts"]; dock inkluderas .spec.ts-filer, vilket orsakar fel.
Om vi backar lite, om ditt repo är okompilerat får du ett fel som ser ut så här:
ERROR in ./node_modules/example/lib/core/example.ts
Module build failed: Error: /Users/example/Work/example/example/node_modules/example/lib/core/example.ts is missing from the TypeScript compilation. Please make sure it is in your tsconfig via the 'files' or 'include' property.
The missing file seems to be part of a third party library. TS files in published libraries are often a sign of a badly packaged library. Please open an issue in the library repository to alert its author and ask them to package the library using the Angular Package Format (goo.gl/jB3GVv).
at AngularCompilerPlugin.getCompiledFile (/Users/example/Work/example/example/node_modules/@angular/cli/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:656:23)
at plugin.done.then (/Users/example/Work/example/example/node_modules/@angular/cli/node_modules/@ngtools/webpack/src/loader.js:467:39)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
@ ./lib/visualization/visualization-widget/visualization-widget/visualization-widget.component.ts 25:24-79
@ ./lib/visualization/visualization-widget/visualization-widget.module.ts
@ ./lib/visualization/visualization.module.ts
@ ./lib/example.module.ts
@ ./src/demo-app/app.module.ts
@ ./src/main.ts
@ multi webpack-dev-server/client?http://0.0.0.0:0 ./src/main.ts
Jag förstår att okomplierad TS inte kommer att importeras som tidigare, eftersom det inte finns någon kontroll över vilken kompilator som används för ett bibliotek. Detta har dock ingen betydelse för oss, eftersom det är i ett internt repo där vi har kontroll över det. Så att importera okomplierad TS sparar oss ett steg (och risken att oavsiktligt utelämna detta steg).
Problemet är att vi inte är säkra på hur vi ska inkludera .ts-filer och exkludera .spec.ts-filer.
I tsconfig.json har vi:
"include": ["node_modules/example/**/*.ts"],
"exclude": ["node_modules/example/**/*.spec.ts"],
Detta fungerar inte. .spec.ts-filer inkluderas fortfarande eftersom, såvitt jag förstår, den första include-regeln 'vinner' över den andra exclude-regeln.
Hur kan vi importera .ts-filer och utesluta .spec.ts-filer?
Här är min fråga från tidigare idag: Hur man utesluter filer som slutar på '.spec.ts' i tsconfig.json Här är en tråd om detta problem: https://github.com/angular/angular-cli/issues/8284
Svar #1
öppna din tsconfig.json, och ändra till detta
{
...
"compilerOptions": {
...
},
"include": [
"./src",
"node_modules/example"
],
"exclude" : ...
}
