Ich verwende npm zum Verwalten der jQuery-, Bootstrap-, Font Awesome- und ähnlichen Client-Bibliotheken, die ich für meine ASP.NET Core-Anwendung benötige.
Der Ansatz, der für mich funktioniert hat, begann mit dem Hinzufügen einer package.json-Datei zum Projekt, die folgendermaßen 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 im Ordner node_modules wieder her, der sich auf derselben Ebene wie wwwroot im Projektverzeichnis befindet:
Da ASP.NET Core die statischen Dateien aus dem Ordner wwwroot bereitstellt und node_modules nicht vorhanden ist, musste ich einige Änderungen vornehmen, damit dies funktioniert. Die erste: Hinzufügen von app.UseFileServer direkt vor app.UseStaticFiles in meinem Startup. 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 die zweite, einschließlich node_modules in meinen PublishOptions in der Datei project.json:
"publishOptions": {
"include": [
"web.config",
"wwwroot",
"Views",
"node_modules"
]
},
Dies funktioniert in meiner Entwicklungsumgebung und auch, wenn ich es auf meiner Azure App Service-Instanz bereitstelle. Die statischen Dateien jquery, bootstrap und font-awesome werden gut bereitgestellt, aber ich bin mir bei dieser Implementierung nicht sicher.
Was ist der richtige Ansatz dafür?
Diese Lösung kam, nachdem viele Informationen aus verschiedenen Quellen gesammelt und einige ausprobiert wurden, die nicht funktionierten, und es scheint ein bisschen seltsam, diese Dateien von außerhalb von wwwroot bereitstellen zu müssen.
Jeder Rat wird sehr geschätzt.
Bundler and Minifier
- Geben Sie an, dass die Quelle außerhalb von wwwroot liegt, und wenn Sie sie erstellen, wird die JS in wwwroot integriert. Das ist der richtige Weg. Sie sollten keine Inhalte von node_modules
node_modules
Ordner statisch zu bedienen . a) So ist das Ökosystem nicht ausgelegt. b) Es ist ein Sicherheitsrisiko. Eines Ihrer installierten Pakete kann vertrauliche Informationen verlieren. Der richtige Weg besteht darin, eine Gebäude-Pipeline (grunt / gulp / node / webpack) einzurichten, die Dateien in einem src
oder einem whatever
Ordner veröffentlicht, der für die Bereitstellung statischer Front-End-Dateien vorgesehen ist