angular - 部署的应用程序引擎未对我的内容进行 gzip 压缩

标签 angular express google-app-engine

最终更新

应该是rolling out end of this month .


这里很奇怪,我已经将一些站点部署到标准环境 NodeJS 上的应用程序引擎。虽然已经晚了,但希望我做错了什么。

我有一个基本脚手架 Angular 6 应用程序,已部署到应用程序引擎,虽然本地运行的服务器为我提供了 gzip 压缩的内容,但部署的应用程序却没有。非常标准的通用server.ts:

import 'zone.js/dist/zone-node';
import 'reflect-metadata';

import * as express from 'express';
import compression from 'compression';

import { enableProdMode } from '@angular/core';
import { join } from 'path';

enableProdMode();

const app = express();
app.use(compression()); // <== Definitely using compression here

const PORT = process.env.PORT || 8080;
const DIST_FOLDER = join(process.cwd(), 'dist');

// * NOTE :: leave this as require() since this file is built Dynamically from webpack
const {
  AppServerModuleNgFactory,
  LAZY_MODULE_MAP
} = require('./dist/server/main');

// Express Engine
import { ngExpressEngine } from '@nguniversal/express-engine';
// Import module map for lazy loading
import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';

app.engine(
  'html',
  ngExpressEngine({
    bootstrap: AppServerModuleNgFactory,
    providers: [provideModuleMap(LAZY_MODULE_MAP)]
  })
);

app.set('view engine', 'html');
app.set('views', join(DIST_FOLDER, 'browser'));

// Server static files from /browser
app.get('*.*', express.static(join(DIST_FOLDER, 'browser')));

// All regular routes use the Universal engine
app.get('*', (req, res) => {
  res.render('index', { req });
});

// Start up the Node server
app.listen(PORT, () => {
  console.log(`Node server listening on http://localhost:${PORT}`);
});

已部署站点的 Devtools 显示完整文件大小,并且响应 header 不是“gzip”,尽管接受编码是通常的 gzip、br 等。

在本地,它是 gzip 压缩的。

我被难住了。

编辑:

作为一个坎坷,我做了一个非常基本的应用程序来展示这个问题。我已经阅读了所有文档,但我真的不明白为什么(如果有的话)为什么不允许 Express 中间件通过 压缩 中间件提供 gzip 压缩的内容。

最大 Assets 的请求 header :

:authority: ng-universal-test-220902.appspot.com
:method: GET
:path: /main.119034af43b36e354210.js
:scheme: https
accept: */*
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
cache-control: no-cache
pragma: no-cache
referer: https://ng-universal-test-220902.appspot.com/
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36

同一请求的响应 header :

accept-ranges: bytes
alt-svc: quic=":443"; ma=2592000; v="44,43,39,35"
cache-control: public, max-age=0
content-length: 642804
content-type: application/javascript; charset=UTF-8
date: Mon, 29 Oct 2018 02:26:38 GMT
etag: W/"9cef4-166bda0e164"
last-modified: Mon, 29 Oct 2018 02:22:09 GMT
server: Google Frontend
status: 200
vary: Accept-Encoding
x-cloud-trace-context: 8d126079c95f2e6bbced4265c46a87ca
x-powered-by: Express

Network panel showing no Content-Encoding headers

最佳答案

根据issue tracker ,将于 11 月底推出。

更新

看来这个已经推出了。

关于angular - 部署的应用程序引擎未对我的内容进行 gzip 压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52752100/

相关文章:

javascript - 无法在 Angular 2、JavaScript 中使用 foreach 推送动态内容

javascript - ExpressJS 无法在 Openshift 中获取/路由,但在本地可以正常工作

javascript - 使用 Express JS 的 Angular 模板组件

google-app-engine - GAE 500 服务器错误

python - 在 GAE Python 中运行 XG 事务

angular - 如何在 Angular 7 中配置 Autoprefixer

css - NgClass 在使用多个类申请时使用属性名而不是类内容

forms - 具有子组件和验证的 Angular 2 嵌套表单

node.js - 闭包查找node.js、mongodb、express

node.js - 事务中的 Google Datastore Transaction API 与 Datastore API