浏览器无法读取gzip压缩文件 - MEAN app

时间:2016-02-16 07:06:32

标签: angularjs express gzip mean gz

我有一个gulp文件gzips my js:

gulp.task('angular', function() {
  return gulp.src(['public/app/*.js'])
    .pipe(jshint())
    .pipe(jshint.reporter('default'))
    .pipe(ngAnnotate())
    .pipe(concat('app.js'))
    .pipe(uglify())
    .pipe(gzip({ append: true}))            // Relevant line here
    .pipe(gulp.dest('public/app/dist'));
});

在我的index.html文件中:

  <script src="app/dist/app.js.gz"></script>

当我注释掉执行gzipping的行时,我没有遇到问题。但是,如果包含它,Angular会在Chrome控制台中输出一条消息:

Uncaught SyntaxError: Unexpected token ILLEGAL

gzip压缩文件中包含看似钻石的字符,因此可能没有正确压缩,浏览器也无法读取字符。

另外一个问题是,你可以使用express 4.0。我已将其添加到我的服务器文件中:

var compress = require('compression');

...

app.use(compress());                       // Relevant line here
app.use(bodyParser.json({limit: '1mb'}));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
app.use(bodyParser.json());

app.use(function(req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type, Authorization');
    next();
});

我不知道这是否在正确的位置,如果这是允许浏览器读取.gz文件的代码行。

1 个答案:

答案 0 :(得分:1)

你不需要在gulp和Express中进行gzip -

app.use(compress());

足以满足您的静态资产。

(不解释您的确切错误,但听起来好像浏览器正在接收双gzip压缩文件,因此压缩输出无法读取)