2015-10-05 9 views
8

Ich habe eine Angular-Anwendung mit Yeoman Schluck Typoskript-Generator generiert.Schluck Typoskript wirft Fehler TS2300: Doppelter Bezeichner 'Moment'

plötzlich ohne ersichtlichen Grund (Änderung des Projekts) während Build Typoskript begann werfen Fehler:

.tmp/typings/moment/moment-node.d.ts(6,16): error TS2300: Duplicate identifier 'moment'. 
[22:08:34] [TypeScript] TypeScript error: .tmp/typings/moment/moment-node.d.ts(6,16): error TS2300: Duplicate identifier 'moment'. 
.tmp/typings/moment/moment.d.ts(8,13): error TS2300: Duplicate identifier 'moment'. 

Siehe unten Gehalt von unter Dateien für den Hinweis. Ich habe 'tsd: install' von der gulp script Aufgabe entfernt, um zu verhindern, dass die ds.ts Dateien und die tsd.d.ts Datei überschrieben werden. Dann versucht, tsd.d.ts zu ändern, um das Problem zu beheben (Ich habe versucht, Moment-Knoten, Moment zu entfernen, Reihenfolge ändern, ich habe auch versucht, moment.d.ts und moment-node.d.ts zu bearbeiten, nichts hat funktioniert: /) .

Meine tsd.json Datei:

{ 
    "version": "v4", 
    "repo": "borisyankov/DefinitelyTyped", 
    "ref": "master", 
    "path": ".tmp/typings", 
    "bundle": ".tmp/typings/tsd.d.ts" 
} 

Mein script.js (schluck taks):

'use strict'; 

var path = require('path'); 
var gulp = require('gulp'); 
var conf = require('./conf'); 

var browserSync = require('browser-sync'); 

var $ = require('gulp-load-plugins')(); 

    var tsProject = $.typescript.createProject({ 
    target: 'es5', 
    sortOutput: true 
    }); 

    gulp.task('scripts', ['tsd:install'], function() { 
    return gulp.src(path.join(conf.paths.src, '/app/**/*.ts')) 
    .pipe($.sourcemaps.init()) 
    .pipe($.tslint()) 
    .pipe($.tslint.report('prose', { emitError: false })) 
    .pipe($.typescript(tsProject)).on('error', conf.errorHandler('TypeScript')) 
    .pipe($.concat('index.module.js')) 
    .pipe($.sourcemaps.write()) 
    .pipe(gulp.dest(path.join(conf.paths.tmp, '/serve/app'))) 
    .pipe(browserSync.reload({ stream: true })) 
    .pipe($.size()) 
}); 

generiert tsd.d.ts:

/// <reference path="angular-local-storage/angular-local-storage.d.ts" /> 
/// <reference path="angular-ui-router/angular-ui-router.d.ts" /> 
/// <reference path="angularjs/angular-animate.d.ts" /> 
/// <reference path="angularjs/angular-cookies.d.ts" /> 
/// <reference path="angularjs/angular-mocks.d.ts" /> 
/// <reference path="angularjs/angular-resource.d.ts" /> 
/// <reference path="angularjs/angular-sanitize.d.ts" /> 
/// <reference path="angularjs/angular.d.ts" /> 
/// <reference path="bootstrap/bootstrap.d.ts" /> 
/// <reference path="d3/d3.d.ts" /> 
/// <reference path="jquery/jquery.d.ts" /> 
/// <reference path="moment/moment.d.ts" /> 
/// <reference path="moment/moment-node.d.ts" /> 
/// <reference path="toastr/toastr.d.ts" /> 

Antwort

6

Wenn Sie Punkt zu einer bestimmten Version wie 1.4.1 statt "Master" für den Verweis: - Ich denke, es wird es für Sie beheben. Es funktioniert für mich.

+0

Hinzufügen der expliziten Version '1.4.1' in' tsd.json', funktioniert. Gutes Timing :-) –

1

Die Fehlermeldung ist irreführend. Ich glaube, dass dieser wahre Grund für den ursprünglichen Fehler auf die Typdefinitionsdatei zurückzuführen ist, die momentan eine TypeScript-Funktion verwendet, die von Ihrer aktuellen Version nicht unterstützt wird. Führen Sie die folgenden Schritte aus, um die neueste Version von gulp-typescript zu erhalten, und dann wird alles für Sie funktionieren, ohne dass Sie Ihre TSD-Datei auf eine bestimmte Revision beschränken müssen. Die Beschränkung auf eine bestimmte Revision hat ihre eigenen Probleme.

npm install [email protected] --save-dev 
0

löschen kendo all.d.ts dann neu erstellen Sie Ihre Website in wwwroot. das funktioniert für mich