Wie npm mit ASP.NET Core zu verwenden
Ich bin mit npm zu verwalten jQuery, Bootstrap, Font Awesome und ähnliche client-Bibliotheken, die ich für meine ASP.NET Kernstück der Anwendung.
Den Ansatz, der arbeitete für mich begonnen, indem ein Paket.json-Datei für das Projekt, dass wie folgt aussieht:
{
"version": "1.0.0",
"name": "myapp",
"private": true,
"devDependencies": {
},
"dependencies": {
"bootstrap": "^3.3.6",
"font-awesome": "^4.6.1",
"jquery": "^2.2.3"
}
}
npm stellt diese Pakete in den node_modules-Ordner auf derselben Ebene wie wwwroot in das Projekt-Verzeichnis:
Als ASP.NET Kern dient die statischen Dateien aus dem Ordner "wwwroot", und node_modules ist nicht da, ich musste ein paar änderungen um diese Arbeit zu machen, die erste: hinzufügen von app.UseFileServer Recht vor app.UseStaticFiles in meinem Systemstart.cs-Datei:
app.UseFileServer(new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"node_modules")),
RequestPath = new PathString("/node_modules"),
EnableDirectoryBrowsing = true
});
app.UseStaticFiles();
und den zweiten, darunter node_modules in meinem publishOptions in das Projekt.json-Datei:
"publishOptions": {
"include": [
"web.config",
"wwwroot",
"Views",
"node_modules"
]
},
Dies funktioniert in meiner Entwicklungsumgebung und es funktioniert auch, wenn ich es bereitstellen zu meinem Azure App Service-Instanz, die von jquery, bootstrap und font-awesome statische Dateien auch gereicht, aber ich bin mir nicht sicher über diese Umsetzung.
Was ist der richtige Ansatz, dies zu tun?
Diese Lösung kam nach dem sammeln viele bits von Informationen aus verschiedenen Quellen zu versuchen einige, die nicht funktioniert hat, und es scheint ein wenig seltsam zu müssen, dienen diese Dateien von außerhalb der wwwroot.
Jede Beratung wird sehr geschätzt.
Bundler und Minifier
- Geben Sie die Quelle Außerhalb der wwwroot und wenn Sie es bauen, baut den JS in wwwroot. Das ist der richtige Weg.. Man sollte nicht das bereitstellen von Inhalten aus node_modules InformationsquelleAutor der Frage Carlos Figueroa | 2016-06-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Durch die Veröffentlichung Ihrer ganzen
node_modules
Ordner, den Sie bereitstellen, die weit mehr Dateien, als Sie tatsächlich benötigen in der Produktion.Verwenden Sie stattdessen ein task-runner als Teil des Erstellungsprozesses zu Verpacken, die die Dateien, die Sie benötigen, und installieren Sie Sie auf Ihrem
wwwroot
Ordner. Dies wird auch ermöglichen es Ihnen, concat und verkleinern Ihrer Vermögen zur gleichen Zeit, anstatt zu dienen, jeder einzelnen Bibliothek getrennt.Können Sie dann auch vollständig zu entfernen, die
FileServer
Konfiguration und verlassen Sie sich aufUseStaticFiles
statt.Derzeit gulp ist die VS-task-runner der Wahl. Hinzufügen eines
gulpfile.js
um den Stamm des Projekts fest, und konfigurieren Sie es, um Ihre statische Dateien, die auf "veröffentlichen".Zum Beispiel können Sie fügen Sie den folgenden
scripts
Abschnitt, um Ihreproject.json
:Das funktioniert mit den folgenden gulpfile (die Standardeinstellung, wenn Gerüste mit
yo
):InformationsquelleAutor der Antwort Sock
npm
für die Verwaltung von client-side-Bibliotheken ist eine gute Wahl (im Gegensatz zu Bower oder NuGet -), du denkst in die richtige Richtung 🙂FileServer
, dassStaticFiles
sollten ausreichen zur Auslieferung statischer Dateien (.js, Bilder, etc.)wwwroot
zupublic
, ansonsten wird die Ordnerstruktur in Azure-Web-Apps können verwirrend sein (D:\Home\site\wwwroot\wwwroot
vsD:\Home\site\wwwroot\public
)node_modules
zu einem web-hosting-server). Sehentools/deploy.js
als Beispiel.Besuchen ASP.NET Core Starter Kit auf GitHub (disclaimer: ich bin der Autor)
InformationsquelleAutor der Antwort Konstantin Tarkus
Installieren Sie die Bundler und Minifier in Visual Studio-Erweiterungen
Dann erstellen Sie ein
bundleconfig.json
und geben Sie die folgenden wie :Also die bundler und minifier (gulp Basis) hat Zugang zu den source-Dateien (die sollte ausgeschlossen werden von Visual Studio und auch ausgeschlossen aus dem GIT) und stellt Sie in den wwwroot wie angegeben
nur Nebeneffekt jedes mal, wenn Sie es speichern, werden auch diese (oder können Sie es oder führen Sie es manuell aus)
InformationsquelleAutor der Antwort ppumkin
Anstatt zu versuchen, zu dienen dem Knoten Ordner Module, können Sie auch Schlucken, um das zu kopieren, was Sie brauchen, um wwwroot.
https://docs.asp.net/en/latest/client-side/using-gulp.html
Dies könnte helfen, zu
Visual Studio 2015 ASP.NET 5, Schluck Aufgabe nicht das kopieren von Dateien von node_modules
InformationsquelleAutor der Antwort Dave_750
Gibt es eine Menge von "richtigen" Ansätze, Sie müssen nur entscheiden, welche am besten Suiten Ihre Bedürfnisse. Es scheint, als ob Sie Missverständnisse wie zu verwenden
node_modules
...Wenn Sie vertraut sind mit NuGet Sie sollten denken, npm als seine client-seitige Gegenstück. Wo die
node_modules
Verzeichnis ist wie diebin
Verzeichnis für NuGet. Die Idee ist, dass dieses Verzeichnis nur einen gemeinsamen Speicherort für das speichern von Paketen, meiner Meinung nach ist es besser einendependency
auf die Pakete, die Sie benötigen, wie Sie getan haben, in derpackage.json
. Dann mit einem task runner wieGulp
zum Beispiel zum kopieren der Dateien müssen Sie in Ihr gewünschteswwwroot
Lage.Schrieb ich eine blog-post über diese wieder im Januar, details npm, Schluck und eine ganze Reihe von anderen details, die heute noch relevant sind. Darüber hinaus rief jemand auf meine Frage ALSO ich und fragte schließlich antwortete mir hier, das ist wahrscheinlich hilfreich.
Erstellte ich eine
Gist
zeigt, dass diegulpfile.js
als Beispiel.In Ihrem
Startup.cs
es ist immer wichtig, die Verwendung von statischen Dateien:Dadurch wird sichergestellt, dass Ihre Anwendung zugreifen kann, was er braucht.
InformationsquelleAutor der Antwort David Pine
Shawn Wildermuth hat eine schöne Anleitung hier: https://wildermuth.com/2017/11/19/ASP-NET-Core-2-0-and-the-End-of-Bower
Dem Artikel links zu den gulpfile auf GitHub, wo er umgesetzt wird die Strategie in dem Artikel. Man könnte einfach kopieren und einfügen die meisten gulpfile Inhalte zu verkaufen, aber seien Sie sicher, dass Sie die entsprechenden Pakete im Paket.json unter devDependencies:
gulp
gulp-verunstalten
gulp-concat
rimraf
merge-stream
InformationsquelleAutor der Antwort Andrew Boza
Ich habe einen besseren Weg gefunden, wie Sie zu verwalten JS-Pakete in mein Projekt mit NPM Gulp/Grunt task-Läufer. Ich weiß nicht, wie die Idee, einen NPM mit einer anderen Ebene der javascript-Bibliothek zu behandeln, der "automation", und meine Anforderung Nummer eins ist die einfache Ausführung der npm-update ohne irgendwelche anderen sorgen, wenn ich brauche zu laufen Schluck Zeug, wenn es erfolgreich kopiert alles und Umgekehrt.
Den NPM-Weg:
Den python-Weg:
InformationsquelleAutor der Antwort Peter Húbek