2016-09-03 2 views
13

Ich bekomme viele "falsche" Fehler, wenn meine gulp Aufgabe mein Typoskript kompiliert. Hier ist der relevante gulp task:TypeScript-Compiler in Gulp sagt, dass es nicht @angular Module finden kann, aber kompiliert

var tsProject = typescript.createProject('tsconfig.json', {noResolve: true}); 

gulp.task('build-ts', function() { 
    gulp.src(appDev + '**/*.ts') 
     .pipe(sourcemaps.init()) 
     .pipe(typescript(tsProject)) 
     .pipe(sourcemaps.write()) 
     //.pipe(jsuglify()) 
     .pipe(gulp.dest(appProd)); 
    gulp.src(appDev + '**/*.+(html|css)') 
     .pipe(gulp.dest(appProd)); 
}); 

Und das sind die Fehler, die ich erhalten:

[09:38:52] Starting 'default'... 
[09:38:52] Finished 'default' after 8.88 ms 
ng/app.component.ts(1,27): error TS2307: Cannot find module '@angular/core'. 
ng/app.component.ts(5,12): error TS2304: Cannot find name 'module'. 
ng/app.module.ts(1,26): error TS2307: Cannot find module '@angular/core'. 
ng/app.module.ts(2,31): error TS2307: Cannot find module '@angular/platform-browser'. 
ng/app.module.ts(3,31): error TS2307: Cannot find module '@angular/common'. 
[...] 
[09:38:53] TypeScript: 27 semantic errors 
[09:38:53] TypeScript: emit succeeded (with errors) 
[BS] Proxying: http://0.0.0.0:5000 

Mein Baumstruktur sieht wie folgt aus (vereinfacht):

. 
├── gulpfile.js 
├── ng 
├── node_modules 
├── package.json 
├── tsconfig.json 
├── typings.json 
└── web 

Alle Module, die das Typoskript Compiler nicht finden kann, sind tatsächlich in node_modules und meine letzte Anwendung funktioniert trotz aller Fehler gut.

Das ist mein tsconfig.js:

{ 
    "compilerOptions": { 
    "target": "ES5", 
    "module": "commonjs", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": false, 
    "noImplicitAny": false, 
    "outDir": "./app" 
    }, 
    "filesGlob": [ 
    "./app/**/*.ts", 
    "!./node_modules/**/*.ts" 
    ], 
    "exclude": [ 
    "node_modules", 
    "typings/main", 
    "typings/main.d.ts" 
    ], 
    "atom": { 
    "rewriteTsconfig": true 
    } 
} 

Wie kann ich diese "falsch positiven" Fehler loszuwerden.

+1

Ich denke, es gibt ein Problem mit den Dateien an die Typoskript-Kompilierung übergeben. Auf der einen Seite übergeben Sie Ihre 'appDev'-Dateien und setzen' noResolve'. Auf der anderen Seite haben Sie eine andere Konfiguration in Ihrer 'tsconfig'. (Achtung: Dateien und Exclude arbeiten nicht zusammen und auch Ihr tsconfig wird nicht von gulp umgeschrieben!) Wenn Sie Probleme mit der Auflösung von Typings haben, können Sie dem Aufruf des Typescript-Compilers das 'traceResolution'-Flag hinzufügen. Das sollte dir ein paar Hinweise geben. siehe https://github.com/Microsoft/TypeScript-Handbook/blob/master/pages/Module%20Resolution.md#tracing-module-resolution. –

+0

Sie sollten sich auch die Option 'noResolve' ansehen, die Sie übergeben. Dies führt dazu, dass keine Importe in Dateien folgen, die nicht an den TypeScript-Compiler übergeben werden. https://github.com/Microsoft/TypeScript-Handbook/blob/master/pages/Module%20Resolution.md#using---noresolve. Ich würde vorschlagen, nicht "gulp.src", aber entweder von der "Tsproject" als Quelle der Wahrheit starten: https://github.com/ivogabe/gulp-typescript#using-tsconfigjson –

Antwort

7

In den gulp.js die Linie

var tsProject = typescript.createProject('tsconfig.json', {noExternalResolve: true, noResolve: true}); 

sollte

var tsProject = typescript.createProject('tsconfig.json'); 

Wie wir externe Typisierungen laden möchten sein einreichen.

Und auch müssen Sie die Typisierungen in den main.ts Datei auf der Oberseite laden:

/// <reference path="../typings/index.d.ts" /> 

Ich habe Ihr Projekt klonen und es kompiliert ohne Warnungen nach diesem.

+0

komischerweise genug habe ich diese beiden Dinge unabhängig voneinander versucht Vor. Vielen Dank! – Juicy

+0

Ich sagte dir vorher, das ist wegen Typings, aber wusste nicht Ihre gesamte Konfiguration :) – tibbus

+0

Typings sollte nicht mit Verweis enthalten sein, sondern direkt in tsconfig oder Ihre Build-Kette. – DaSch

Verwandte Themen