IIS + compress-webpack-plugin (gzip) - Не удалось загрузить «скрипт» с исходным кодом - PullRequest
0 голосов
/ 30 ноября 2018

Я использую compress-webpack-plugin для сжатия моих файлов javascript в формат gz в моем проекте ASP.NET MVC 5.

Часть моего webpack.config.js с сжатие-webpack-плагин настройки:

const CompressionPlugin = require('compression-webpack-plugin');

module.exports = {
//...
  plugins: [
  //...
    new CompressionPlugin({
      test: /\.(js|css)$/,
      filename: '[path].gz[query]',
      algorithm: 'gzip',
      deleteOriginalAssets: true
    }),
  ],
//...
};

Работает нормально:

enter image description here

Следующим шагом является включение сжатия GZIP в IIS, поэтому прежде всего я проверяю, есть ли у меня необходимые функции в Возможности Windows :

enter image description here

... и включение сжатия для моего приложения непосредственно в IIS, как показано на рисунке ниже.

enter image description here

Дополнительно я добавил этот фрагменткода для моего Web.config :

<system.webServer>
   <urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>

После сборки скрипты не загружаются веб-браузером - у меня есть предупреждения для каждого файла скрипта в консоли:

Не удалось загрузить «скрипт» с источником «http://192.168.100.100:8088/Scripts/dist/runtime.7b9bc97b36a783fd7495.js”.

Что я сделал не так?Должен ли я установить что-то еще в моем бэкэнде?Обратите внимание, что я включаю скрипт с расширением .js , а не .js.gz - это ошибка?

1 Ответ

0 голосов
/ 04 декабря 2018

Хорошо, наконец, после действительно глубокого поиска я нашел решение.

  1. Отключить динамическое и статическое сжатие в IIS для проекта (поскольку я уже распаковал файлы, поэтому оставьте процессор в покое!)

enter image description here

Загрузите и установите модуль перезаписи URL для IIS отсюда: https://www.iis.net/downloads/microsoft/url-rewrite

Удалить из Web.config ниже строки (если все еще существует):

<urlCompression doStaticCompression="true" doDynamicCompression="true" />

Добавьте в Web.config фрагмент кода ниже:

<system.webServer>
<staticContent>
  <remove fileExtension=".js.gz" />
  <remove fileExtension=".css.gz" />
  <remove fileExtension=".png.gz" />
  <remove fileExtension=".jpg.gz" />
  <remove fileExtension=".gif.gz" />
  <remove fileExtension=".svg.gz" />
  <remove fileExtension=".html.gz" />
  <remove fileExtension=".json.gz" />
  <mimeMap fileExtension=".js.gz" mimeType="application/javascript" />
  <mimeMap fileExtension=".css.gz" mimeType="text/css" />
  <mimeMap fileExtension=".png.gz" mimeType="image/png" />
  <mimeMap fileExtension=".jpg.gz" mimeType="image/jpeg" />
  <mimeMap fileExtension=".gif.gz" mimeType="image/gif" />
  <mimeMap fileExtension=".svg.gz" mimeType="image/svg+xml" />
  <mimeMap fileExtension=".html.gz" mimeType="text/html" />
  <mimeMap fileExtension=".json.gz" mimeType="application/json" />
</staticContent>

<rewrite>
  <outboundRules rewriteBeforeCache="true">
    <rule name="Custom gzip file header">
      <match serverVariable="RESPONSE_CONTENT_ENCODING" pattern=".*" />
      <conditions>
        <add input="{REQUEST_URI}" pattern="\.gz$" />
      </conditions>
      <action type="Rewrite" value="gzip"/>
    </rule>
  </outboundRules>

  <rules>
    <rule name="Rewrite gzip file">
      <match url="(.*)"/>
      <conditions>
        <add input="{HTTP_ACCEPT_ENCODING}" pattern="gzip" />
        <add input="{REQUEST_FILENAME}.gz" matchType="IsFile" />
      </conditions>
      <action type="Rewrite" url="{R:1}.gz" />
    </rule>
  </rules>
</rewrite>
  </system.webServer>
Убедитесь, что у вас есть .gz в MIME-типах в IIS:

enter image description here

...