我有一个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文件的代码行。
答案 0 :(得分:1)
你不需要在gulp和Express中进行gzip -
app.use(compress());
足以满足您的静态资产。
(不解释您的确切错误,但听起来好像浏览器正在接收双gzip压缩文件,因此压缩输出无法读取)