it-swarm.com.ru

сжатие gzip и webpack

Я не могу заставить работать gzip. Я хочу сделать файлы GZIP заранее. Я делаю это с помощью сжатия-веб-пакета-плагина. Я использую эти файлы на сервере обычным способом.

app.use(Express.static(path.join(__dirname, '../', 'dist')))

app.get('*', (req: Object, res: Object) => {
  res.render('index')
})

И я ссылаюсь на эти файлы в моем шаблоне.

<head>
    <meta charset="UTF-8" />
    <title>Q</title>
      <link rel='stylesheet' type='text/css' href="stylesLocal.29kf81a60pl57850llfi.js.gz">
</head>

  <body>
      <div id="app"><%- app %></div>
      <script src="bundle.2720b1a98103167676ac.js.gz"></script>
      <script src="vendor.57erz1a981hk5786756u.js.gz"></script>
  </body>
</html>

Все работает, если я не распаковываю файлы, но когда я отправляю файлы .gz, они ломаются. Я читаю, что я должен установить Content-Encoding: gzip и Content-Type , и я попробовал это, но какой бы тип файла я ни указывал, он жалуется, так как я отправляю css, js и текстовый файл. Не знаете, как заставить это работать?

5
Igor-Vuk

Похоже, у вас уже есть файлы .gz на сервере. Если вы хотите, чтобы Express обслуживал их, вам нужно что-то вроде connect-gzip-static: https://github.com/pirxpilot/connect-gzip-static

Как это устроено

Мы начнем с размещения всех сжатых файлов (т.е. файлов с расширениями .Gz и .br) в корневом каталоге. Все HTTP GET и HTTP HEAD запросы с заголовком Accept-Encoding, установленным в gzip, проверяются на список сжатых файлов и, если возможно, выполняется путем возврата сжатые версии. Если сжатая версия не найдена или если запрос не имеет соответствующего заголовка Accept-Encoding, запрос обрабатывается так же, как и стандартное статическое промежуточное ПО.

1
olore

Из того, что я понял, вы связываете файлы, запускаете сжатие, чтобы получить доступную версию .gz, и HTML должен вызывать версию NON-gzip.

Это показывает вам, что вы хотите?

https://forum-archive.vuejs.org/topic/4059/adding-gzip-to-webpack-using-compression-plugin

ПРАВКА

удалить .gz

  <script src="bundle.2720b1a98103167676ac.js"></script>
  <script src="vendor.57erz1a981hk5786756u.js"></script>

Причина: браузер сообщает серверу, поддерживает ли он GZip, если это так, он отправляет версию файла .gz, в противном случае отправляет текстовую версию. Браузер декодирует файл и загружает его в HTML. Все, что вы видите, это декодированная версия. 

Если Сервер отправляет версию .gz, но она не работает в браузере, тогда файл .gz сделан неправильно.

0
Phillip Williams