2016-04-17 14 views
12

Nach dem Angular2 TS Quickstart habe ich doppelte Dateien in vielen Ordnern in meinem Projekt.Duplicate Identifier für Angular2 Typescript Dateien

Für Browser:

typings/browser 
node_modules/angular2/typings/browser 

Für es6-Shim:

node_modules/angular2/typings/es6-shim 
typings/browser/ambient/es6-shim 
typings/main/ambient/es6-shim 

Es führt zu duplizieren Identifier Fehler während Build.

Wie verhindern/unterdrücken wir, dass TS doppelte Identifizierungsfehler verursacht?

Ich habe node_modules in meine Ausschlussliste aufgenommen, aber da ich Angular2 in meinen Includes verwende, wird sie von TSD wegen moduleResolution "node" zurückgenommen. Ersetzen Sie es durch einen anderen moduleResolution Wert wie "classic" verursacht andere Probleme.

Das ist mein tsconfig.json:

{ 
    "compilerOptions": { 
    "target": "es5", 
    "module": "system", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": false, 
    "noImplicitAny": false, 
    "outDir": "./dist" 
    }, 
    "exclude": [ 
    "bower_components", 
    "node_modules", 
    "typings/main", 
    "typings/main.d.ts" 
    ] 
} 

UPDATE 1

mein appcomponent.ts hier:

///<reference path="../../node_modules/angular2/typings/browser.d.ts"/> 
import {bootstrap} from 'angular2/platform/browser'; 
import {LocationComponent} from '../location/components/locationcomponent'; 
import {VideosComponent} from '../videos/components/videoscomponent'; 

bootstrap(LocationComponent, []) 
    .catch(err => console.error(err)); 

bootstrap(VideosComponent, []) 
    .catch(err => console.error(err)); 

UPDATE 2

Das ist, was ich habe für meine Webprojektdatei.

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion> 
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> 
    </PropertyGroup> 
    <Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.Props" Condition="'$(VSToolsPath)' != ''" /> 
    <PropertyGroup Label="Globals"> 
    <ProjectGuid>3775534b-d08c-45f2-8d5a-4a4f6e91edb9</ProjectGuid> 
    <RootNamespace>MyProject</RootNamespace> 
    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">..\..\artifacts\obj\$(MSBuildProjectName)</BaseIntermediateOutputPath> 
    <OutputPath Condition="'$(OutputPath)'=='' ">..\..\artifacts\bin\$(MSBuildProjectName)\</OutputPath> 
    <SccProjectName>SAK</SccProjectName> 
    <SccProvider>SAK</SccProvider> 
    <SccAuxPath>SAK</SccAuxPath> 
    <SccLocalPath>SAK</SccLocalPath> 
    </PropertyGroup> 
    <PropertyGroup> 
    <SchemaVersion>2.0</SchemaVersion> 
    </PropertyGroup> 
<PropertyGroup Condition="'$(Configuration)' == 'Debug'"> 
    <TypeScriptTarget>ES5</TypeScriptTarget> 
    <TypeScriptJSXEmit>None</TypeScriptJSXEmit> 
    <TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled> 
    <TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny> 
    <TypeScriptModuleKind>CommonJS</TypeScriptModuleKind> 
    <TypeScriptRemoveComments>False</TypeScriptRemoveComments> 
    <TypeScriptOutFile /> 
    <TypeScriptModuleResolution>NodeJs</TypeScriptModuleResolution> 
    <TypeScriptOutDir /> 
    <TypeScriptGeneratesDeclarations>False</TypeScriptGeneratesDeclarations> 
    <TypeScriptNoEmitOnError>True</TypeScriptNoEmitOnError> 
    <TypeScriptSourceMap>True</TypeScriptSourceMap> 
    <TypeScriptMapRoot /> 
    <TypeScriptSourceRoot /> 
    <TypeScriptExperimentalDecorators>True</TypeScriptExperimentalDecorators> 
    </PropertyGroup> 
    <Target Name="FixTsBuildConfiguration" BeforeTargets="CompileTypeScript" > 
    <PropertyGroup> 
     <TypeScriptBuildConfigurations>$(TypeScriptBuildConfigurations.Replace("--moduleResolution NodeJs", "--moduleResolution node"))</TypeScriptBuildConfigurations> 
    </PropertyGroup> 
    </Target> 
    <ItemGroup> 
    <DnxInvisibleContent Include="bower.json" /> 
    <DnxInvisibleContent Include=".bowerrc" /> 
    <DnxInvisibleContent Include="package.json" /> 
    <DnxInvisibleFolder Include="wwwroot\bower_components\" /> 
    <DnxInvisibleFolder Include="wwwroot\node_modules\" /> 
    </ItemGroup> 
    <Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.targets" Condition="'$(VSToolsPath)' != ''" /> 
</Project> 

UPDATE 3

Ich fand heraus, dass Angular2 in Visual Studio 2015 erfordert einen anderen Ansatz nach oben zu setzen. Ich folgte den Schritten in Starting Angular 2 in ASP.NET 5 with TypeScript using Visual Studio 2015 und ich bekam keine Build-Probleme mehr.

+0

Gibt es einen Grund, warum Sie zweimal bootstrappen? Die meisten Leute haben eine 'app' oder' root' Komponente, in die sie andere Komponenten verschachteln. –

+0

Sie sind zwei separate Komponenten, die keine gemeinsamen Elemente haben. Meine App ist kein SPA. Sie werden serverseitig gerendert. –

+0

@ JonasArcangel Posten Sie Ihre Lösung als Antwort. – Dinistro

Antwort

0

Sie können einen "filesGlob" -Eintrag in Ihre tsconfig.json-Datei einfügen, um unnötige Dateien auszuschließen. Zum Beispiel:

"filesGlob": [ 
    "./src/**/*.ts", 
    "./test/**/*.ts", 
    "!./node_modules/**/*.ts", 
    "typings/browser.d.ts" 
    ] 
+0

Es hat nicht funktioniert. Die Probleme mit doppelten Bezeichnern sind immer noch vorhanden. Was macht das! Symbol steht für? Ich habe versucht, eins ohne und mit "node_modules/**/*. Ts" zu haben. Kein Glück. –

+0

das "!" Symbol bedeutet Ausschluss –

+0

Ich sehe. Es wird immer noch aufgenommen, vielleicht aus dem gleichen Grund wie in meinem Post erwähnt (siehe Update), darüber, dass es in meiner Komponente referenziert wird. –

8

Typoskript < = 1,6

Sie müssen die node_modules und die Typisierungen/main Dateien in Ihrem tsconfig.json mit **

"exclude": [ 
    "bower_components/**", 
    "node_modules/**", 
    "typings/main.d.ts", 
    "typings/main/**", 
], 

Ohne die ** sucht er auszuschließen eine Datei namens node_modules typings/main und nicht das Verzeichnis selbst.

Typoskript> 1.6

In Typoskript Versionen über 1.6 die ** nicht benötigt werden.

EDIT

den Referenzpfad in Ihrem appcomponent.ts entfernen. Sie benötigen keine Referenzpfade, wenn Sie das Typoskript wie folgt kompilieren.

+0

Ich habe das versucht und es gab mir mehr Fehler zusätzlich zu den doppelten Bezeichner. –

+0

@JonasArcangel können Sie mir bitte diese Fehler geben? Vielleicht sehe ich was das Problem ist. – Dinistro

+0

@JonasArcangel Siehe meine aktualisierte Antwort, ich habe Ihren Fehler gefunden – Dinistro

Verwandte Themen