Skip to content

Commit 79b95ce

Browse files
committed
feat: serve all pre-compressed file types
1 parent c932a08 commit 79b95ce

File tree

4 files changed

+12
-23
lines changed

4 files changed

+12
-23
lines changed

README.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,7 @@ server:
3737
compress: false
3838
header: true
3939
serveStatic:
40-
preCompressed:
41-
enable: false
42-
extensions: ['html', 'js', 'css']
40+
preCompressed: false
4341
```
4442
4543
- **port**: Server port
@@ -48,9 +46,7 @@ server:
4846
- **compress**: Enable GZIP compression
4947
- **header**: Add `X-Powered-By: Hexo` header
5048
- **serveStatic**: Extra options passed to [serve-static](https://github.com/expressjs/serve-static#options)
51-
- **preCompressed**: Serve pre-compressed assets. Run `hexo generate` before enabling it.
52-
- **enable**: Enable/disable preCompressed. Defaults to `false`.
53-
- **extensions**: Array of pre-compressed file types to serve. Defaults to `['html', 'js', 'css']`.
49+
- **preCompressed**: Serve pre-compressed assets
5450

5551
## License
5652

index.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@ hexo.config.server = Object.assign({
99
ip: undefined,
1010
compress: false,
1111
header: true,
12-
preCompressed: {
13-
enable: false,
14-
extensions: ['html', 'js', 'css']
15-
}
12+
preCompressed: true
1613
}, hexo.config.server);
1714

1815
hexo.extend.console.register('server', 'Start the server.', {

lib/middlewares/pre_compressed.js

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,26 @@ const { getType } = require('mime');
55
module.exports = function(app) {
66
const { config, route } = this;
77
const { root } = config;
8-
const options = config.server;
9-
const extRegex = new RegExp('\\.(' + options.preCompressed.extensions.join('|') + ')$');
108

11-
if (!options.preCompressed.enable) return;
9+
if (!config.server.preCompressed) return;
1210

1311
app.use(root, (req, res, next) => {
1412
const routeList = route.list();
1513
const { headers, method, url } = req;
1614
const acceptEncoding = headers['accept-encoding'] || '';
17-
const contentType = getType(url.endsWith('/') ? url.concat('index.html') : url);
15+
const reqUrl = url.endsWith('/') ? url.concat('index.html') : url;
16+
const contentType = getType(reqUrl);
1817
const vary = res.getHeader('Vary');
1918

20-
if ((!url.endsWith('/') && !extRegex.test(url))
21-
|| (method !== 'GET' && method !== 'HEAD')) {
22-
return next();
23-
}
19+
if (method !== 'GET' && method !== 'HEAD') return next();
2420

2521
res.setHeader('Content-Type', contentType + '; charset=utf-8');
2622

27-
if (acceptEncoding.includes('br') && (routeList[url.slice(1) + '.br'] || url.endsWith('/'))) {
28-
req.url = (url.endsWith('/') ? url.concat('index.html') : url) + '.br';
23+
if (acceptEncoding.includes('br') && (routeList.includes(url.slice(1) + '.br') || url.endsWith('/'))) {
24+
req.url = reqUrl + '.br';
2925
res.setHeader('Content-Encoding', 'br');
30-
} else if (acceptEncoding.includes('gzip') && (routeList[url.slice(1) + '.gz'] || url.endsWith('/'))) {
31-
req.url = (url.endsWith('/') ? url.concat('index.html') : url) + '.gz';
26+
} else if (acceptEncoding.includes('gzip') && (routeList.includes(url.slice(1) + '.gz') || url.endsWith('/'))) {
27+
req.url = reqUrl + '.gz';
3228
res.setHeader('Content-Encoding', 'gzip');
3329
}
3430

lib/middlewares/route.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module.exports = function(app) {
77
const { config, route } = this;
88
const { args = {} } = this.env;
99
const { root, server } = config;
10-
const preCompressed = server.preCompressed ? server.preCompressed.enable : false;
10+
const preCompressed = server.preCompressed ? server.preCompressed : false;
1111

1212
if (args.s || args.static) return;
1313

0 commit comments

Comments
 (0)