2017-03-16 5 views
2

Ich bin ein großer Fan von ASP.NET Core und habe seine Entwicklung von den ersten Schritten bis zur Integration in VS2017 mit der Rückkehr zum Msbuild-basierten Projektsystem verfolgt. Ich bin auch ein großer Fan von Google Polymer und jetzt, da die Version 2.0 fast fertig ist, möchte ich mit der Kombination von beiden experimentieren.Publishing Polymer + ASP.NET Core

Ich habe ein ASP.NET Core Web API-Projekt erstellt, das eine REST-API für das Polymer-Frontend implementieren wird. Dann zeigte ich meine Befehlszeile mit dem Wwwroot-Ordner und tat

polmyer init 

eine Anwendung Vorlage zu erstellen, das einige Vorlage HTML-Dateien und ein bower_components Verzeichnis mit allen grundlegenden Abhängigkeiten schafft, alle in den Wwwroot-Ordnern!

Meine Frage ist:

VS2017 hat eine Funktion veröffentlichen, die standardmäßig alles veröffentlicht, die sich im Ordner wwwroot ist aber wahrscheinlich würde mir erlauben, bestimmte Dateien oder Ordner ausschließen. Auf der anderen Seite Polymer-CLI als eine Build-Funktion, die es mir ermöglicht, ES6 zu ES5 zu kompilieren, minimieren Sie entweder HTML, CSS, JS oder alle und bündeln Sie die Dateien. Wie kann ich die beiden kombinieren, um mir eine Single-Click-Publisher-Erfahrung in VS2017 zu geben?

Antwort

3

Hier ist meine aktuelle Lösung:

Mit VS2017 erstellen Sie eine neue ASP.NET Core-Web-Anwendung (.NET Core) Projekt. Fügen Sie das Microsoft.AspNetCore.StaticFiles Nuget-Paket hinzu, um statische Dateien bereitstellen zu können.

Navigieren Sie zu dem wwwroot Verzeichnis mit einem Zeilenbefehl und do

polymer init 

den Assistenten Folgen Sie Ihren gewünschten Polymerprojekttyp zu erstellen.

öffnen csproj Datei im VS IDE und die Artikelgruppe finden, wo die wwwroot Verzeichnis als Ordner enthalten ist. Kommentieren Sie diese Zeile und fügen Sie zwei neue Zeilen hinzu. Der erste verhindert, dass VS das gesamte Verzeichnis wwwroot kopiert. Die zweite fügt das Polymerbuild-Verzeichnis erneut hinzu, so dass wir es später in einer Kopieraufgabe referenzieren können.

<ItemGroup> 
    <!--<Folder Include="wwwroot\" />--> 
    <Content Update="wwwroot\**\*" CopyToPublishDirectory="Never" /> 
    <ClientFiles Include="wwwroot\build\default\**\*" /> 
</ItemGroup> 

(Beachten Sie, dass ich verwendet aktualisieren statt einschließen im Content-Knoten!)

eine Batchdatei erstellen Polymer-build.cmd mit folgendem Inhalt und legen Sie sie in der Projektstammverzeichnis. Dadurch wird Polymer mit den Client-Dateien erstellen, bevor jeder VS

cd wwwroot 
polymer build 

veröffentlichen Hier können Sie Optionen wie --js-Kompilierung, --css-minify usw. hinzufügen

Erstellen Sie einen neuen Zielknoten in der csproj Datei, bevor die Batch-Datei aufrufen

<Target Name="PolymerBuild" BeforeTargets="Publish"> 
    <Exec Command="polymer-build.cmd" /> 
</Target> 

schließlich eine weitere Zielknoten mit einer Kopie Aufgabe erstellen, zu veröffentlichen, das Polymer Build-Verzeichnis in das Verzeichnis wwwroot

zu kopieren
<Target Name="PolymerPublish" AfterTargets="Publish"> 
    <Copy SourceFiles="@(ClientFiles)" DestinationFolder="$(PublishUrl)\wwwroot\%(RecursiveDir)" /> 
</Target> 

Zusatz

Sie können auch Typoskript Kompilation zu unterdrücken, die Sie im csproj über

<PropertyGroup> 
    <TypeScriptCompileBlocked>True</TypeScriptCompileBlocked> 
</PropertyGroup> 

Referenzen tun können:

0

Sie können den Befehl polymer init im Befehl pre-build des Projekts in Vusual Stddio hinzufügen.

+0

Danke aber 'Polymer init' ist eine einmalige Aufgabe während der Projekteinrichtung. Es müsste "polymer build" (--options) sein und ich möchte es nicht bei jedem VS-Build ausführen! 'polymer build' ist mehr wie VS publish, also müsste es auf VS publish oder direkt davor ausgeführt werden (wenn es ein solches Ereignis gibt). 'polymer build' erstellt ein Build-Unterverzeichnis und das ist dasjenige, das VS-publiziert werden müsste, nicht alle anderen Dateien in wwwroot. Irgendwelche Ideen dazu? – NicolasR

+0

@NicolasR Wie funktioniert der Polymer- und ASP.NET-Kern für Sie? Haben Sie irgendwo einen Blog oder eine Dokumentation? Ich denke, das gleiche zu tun –

+0

@JordanMcDonald Sorry, kein Blog :-(Bisher mag ich die Kombination. Ich mag die saubere Trennung: ASP.NET für eine REST API, EF Core für die abstrahierung von der konkreten datenbank technologie und Polymer für eine clientseitige Single-Page-App mit einem standardkonformen Komponentensystem Ich mag es auch, dass die Serverseite nun auf vielen Plattformen laufen kann, sogar auf einem RasPi mit Linux.Polymer versteckt die unterschiedliche Unterstützung von Web-Komponenten durch die gängigen Browser ES6 Klassensyntax zum Definieren von Komponenten in Polymer ist eine große Hilfe für jemanden aus C++/C# Die Polymer-Community könnte jedoch größer sein – NicolasR

0

I habe einen Frage an Sie, Leute ... :-) Ich habe eine Polymer 2-Anwendung erstellt (in Visual Studio Code, aber dieses Detail ist nicht wichtig). Ich habe es mit den Standardeinstellungen von es5 gebündelt, und ich sehe, dass ich es richtig ausführen kann, wenn lokal sowohl im Hauptverzeichnis als auch im gebündelten Verzeichnis (jeden Browser, einschließlich Internet Explorer).
Jetzt kopiere ich alle erstellten Dateien (mit FileZilla, in ftp) in ein Zielwwwroot-Verzeichnis auf einem Azure AppService, und ich sehe, dass alles in Chrome und FireFox funktioniert, aber nicht in Internet Explorer.
Ich sehe eine leere Seite und öffne den DOM Explorer, ich sehe, dass ohne Fehler nur die erste HTML-Seite geladen wird, als ob der Server nichts analysiert hätte ...