Estou usando o npm para gerenciar jQuery, Bootstrap, Font Awesome e bibliotecas de cliente semelhantes de que preciso para meu aplicativo ASP.NET Core.
A abordagem que funcionou para mim começou adicionando um arquivo package.json ao projeto, que se parece com isto:
{
"version": "1.0.0",
"name": "myapp",
"private": true,
"devDependencies": {
},
"dependencies": {
"bootstrap": "^3.3.6",
"font-awesome": "^4.6.1",
"jquery": "^2.2.3"
}
}
O npm restaura esses pacotes na pasta node_modules que está no mesmo nível que wwwroot no diretório do projeto:
Como o ASP.NET Core fornece os arquivos estáticos da pasta wwwroot e node_modules não está lá, eu tive que fazer algumas alterações para fazer isso funcionar, a primeira: adicionar app.UseFileServer logo antes de app.UseStaticFiles em minha inicialização. arquivo cs:
app.UseFileServer(new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"node_modules")),
RequestPath = new PathString("/node_modules"),
EnableDirectoryBrowsing = true
});
app.UseStaticFiles();
e o segundo, incluindo node_modules em my publishOptions no arquivo project.json:
"publishOptions": {
"include": [
"web.config",
"wwwroot",
"Views",
"node_modules"
]
},
Isso funciona em meu ambiente de desenvolvimento e também funciona quando eu o implanto em minha instância do Azure App Service, os arquivos estáticos jquery, bootstrap e font-awesome são servidos bem, mas não tenho certeza sobre essa implementação.
Qual é a abordagem certa para fazer isso?
Esta solução veio depois de coletar muitas informações de várias fontes e tentar algumas que não funcionaram, e parece um pouco estranho ter que servir esses arquivos de fora do wwwroot.
Qualquer conselho será bem-vindo.
Bundler and Minifier
- Especifique a fonte como Outside wwwroot e quando você construí-lo constrói o JS em wwwroot. Essa é a maneira correta. Você não deve veicular conteúdo de node_modules
node_modules
pasta estaticamente . a) não é assim que o ecossistema foi projetado b) é um risco de segurança, um de seus pacotes instalados pode vazar informações confidenciais. A maneira adequada é configurar um pipeline de construção (grunt / gulp / node / webpack) que publica arquivos em uma pasta src
ou whatever
dedicada a servir arquivos de front-end estáticos