J'utilise npm pour gérer les bibliothèques client jQuery, Bootstrap, Font Awesome et similaires dont j'ai besoin pour mon application ASP.NET Core.
L'approche qui a fonctionné pour moi a commencé par l'ajout d'un fichier package.json au projet, qui ressemble à ceci:
{
"version": "1.0.0",
"name": "myapp",
"private": true,
"devDependencies": {
},
"dependencies": {
"bootstrap": "^3.3.6",
"font-awesome": "^4.6.1",
"jquery": "^2.2.3"
}
}
npm restaure ces packages dans le dossier node_modules qui est au même niveau que wwwroot dans le répertoire du projet:
Comme ASP.NET Core sert les fichiers statiques du dossier wwwroot et que node_modules n'est pas là, j'ai dû apporter quelques modifications pour que cela fonctionne, le premier: ajouter app.UseFileServer juste avant app.UseStaticFiles dans mon démarrage. fichier cs:
app.UseFileServer(new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"node_modules")),
RequestPath = new PathString("/node_modules"),
EnableDirectoryBrowsing = true
});
app.UseStaticFiles();
et le second, y compris node_modules dans mes publishOptions dans le fichier project.json:
"publishOptions": {
"include": [
"web.config",
"wwwroot",
"Views",
"node_modules"
]
},
Cela fonctionne dans mon environnement de développement et cela fonctionne également lorsque je le déploie sur mon instance Azure App Service, les fichiers statiques jquery, bootstrap et font-awesome sont bien servis, mais je ne suis pas sûr de cette implémentation.
Quelle est la bonne approche pour y parvenir?
Cette solution est venue après avoir collecté beaucoup d'informations à partir de plusieurs sources et en avoir essayé certaines qui n'ont pas fonctionné, et il semble un peu étrange de devoir servir ces fichiers depuis l'extérieur de wwwroot.
Tout conseil sera grandement apprécié.
Bundler and Minifier
- Spécifiez que la source est Outside wwwroot et lorsque vous construisez, il construit le JS dans wwwroot. C'est la bonne façon. Vous ne devriez pas servir de contenu à partir de node_modules
node_modules
dossier de manière statique . a) ce n'est pas ainsi que l'éco-système est conçu b) c'est un risque pour la sécurité, l'un de vos packages installés peut fuir des informations sensibles. La bonne façon est de configurer un pipeline de construction (grunt / gulp / node / webpack) qui publie des fichiers dans un dossier src
ou whatever
dédié au service de fichiers frontaux statiques