Я пытаюсь настроить GZIP для моих статических файлов (в основном, JavaScript), которые были предварительно сжаты с помощью плагина сжатия Webpack (compress-webpack-plugin).
Я следовал этой статье по обслуживаниюпредварительно сжатые статические файлы с использованием .NET Core - https://dzone.com/articles/serving-pre-compressed-static-files-in-aspnet-core.
В моем методе Startup.Configure
есть следующее:
var mimeTypeProvider = new FileExtensionContentTypeProvider();
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = context =>
{
var headers = context.Context.Response.Headers;
var contentType = headers["Content-Type"];
if (contentType != "application/x-gzip" && !context.File.Name.EndsWith(".gz"))
{
return;
}
var fileNameToTry = context.File.Name.Substring(0, context.File.Name.Length - 3);
if (mimeTypeProvider.TryGetContentType(fileNameToTry, out var mimeType))
{
headers.Add("Content-Encoding", "gzip");
headers["Content-Type"] = mimeType;
}
}
});
Это, похоже, не помоглоМои активы обслуживаются без сжатия.При добавлении точки останова в метод действия OnPrepareResponse
она не применяется ни для каких файлов JavaScript.Однако он получил удар по моему фавикону и моему логотипу.
Я также попробовал этот пакет NuGet - https://github.com/AnderssonPeter/CompressedStaticFiles - который также, похоже, не решил мою проблему.
Вот скриншот моей папки wwwroot для справки:
Я пытаюсь обслуживать эти файлы JS в папке / dist, используя следующуюссылки в моем представлении _Layout.cshtml:
<script src="~/dist/vendors~main.bundle.js"></script>
<script src="~/dist/main.bundle.js"></script>
Наконец, вот пример заголовков для поставщиков ~ main.bundles.js (взят из инструментов разработчика Chrome):
Есть идеи, почему это не работает?
ОБНОВЛЕНИЕ 08/05/2019
Похоже, чтоПромежуточное ПО для статических файлов как-то конфликтует с Webpack Dev Middleware.Если я удаляю следующие строки кода из моего метода настройки запуска, он работает, и точка останова в OnPrepareResponse
попадает для всех файлов, как и ожидалось:
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true
});
Это ошибка или я просто что-то делаюнеправильно?