MXOXW

Life always finds a way.

NodeJS 模块修改

| Comments

HEXO

新建博客时,将中文标题转换为拼音

/node_modules/hexo/lib/plugins/console/new.js
修改部分如下

1
2
3
4
5
6
7
8
9
10
var tr = require('transliteration');

var data = {
title: args._.pop(),
layout: args._.length ? args._[0] : this.config.default_layout,
slug: args.s || args.slug,
path: args.p || args.path
};
// 中文标题转换为拼音
data.slug = tr.slugify(data.title);

代码高亮添加源代码属性

node_modules/hexo/node_modules/hexo-util/lib/highlight.js [line: 35]
修改部分如下

1
result += '<figure class="highlight' + (data.language ? ' ' + data.language : '') + '" data-source-code="' + str.replace(/"/g, '&quot;') + '">';

http-server

判断文件编码

http-server/node_modules/ecstatic/lib/ecstatic.js
修改function serve

1
2
3
4
5
6
if (contentType) {
charSet = mime.charsets.lookup(contentType, 'utf-8', file);
if (charSet) {
contentType += '; charset=' + charSet;
}
}

http-server/node_modules/ecstatic/node_modules/mime/mime.js
修改最后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var jschardet = require("jschardet");

mime.charsets = {
lookup: function(mimeType, fallback, file) {
// Assume text types are utf8
if (!mimeType.match(/text\//)) {
return fallback;
}

var bin = fs.readFileSync(file),
charset = jschardet.detect(bin);
// console.log('*****' + file + ': [' + charset.encoding + ', '+ charset.confidence + ']');
if (charset.confidence <= 0.95) {
// console.log('Get file codeType {' + file + ': [' + charset.encoding + ', '+ charset.confidence + ']}');
return fallback;
}
return charset.encoding || fallback;
}
};

修改MIME

http-server/node_modules/ecstatic/node_modules/mime/types.json

http-server添加gzip支持

http-server/node_modules/ecstatic/lib/ecstatic.js
修改function serve

注释res.setHeader('content-length', stat.size);
最后添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
if (req.query && req.query.callback) {
var data = fs.readFileSync(file, charSet),
r = new stream.Readable();
// console.log(req.query.callback + '(' + data + ')');

r.push(req.query.callback);
r.push('(');
r.push(data);
r.push(')');
r.push(null);

if (shouldCompress(req)) {
var acceptEncoding = req.headers['accept-encoding'].split(",");

switch (acceptEncoding[0].trim()) {
case 'gzip':
res.setHeader('content-encoding', 'gzip');
r = r.pipe(zlib.createGzip());
break;
case 'deflate':
res.setHeader('content-encoding', 'deflate');
r = r.pipe(zlib.createDeflate());
break;
default:
break;
}
}

return r.pipe(res);
}

var rs = fs.createReadStream(file);

if (shouldCompress(req)) {
var acceptEncoding = req.headers['accept-encoding'].split(",");

switch (acceptEncoding[0].trim()) {
case 'gzip':
res.setHeader('content-encoding', 'gzip');
rs = rs.pipe(zlib.createGzip());
break;
case 'deflate':
res.setHeader('content-encoding', 'deflate');
rs = rs.pipe(zlib.createDeflate());
break;
default:
res.setHeader('content-length', stat.size);
break;
}
}
else {
res.setHeader('content-length', stat.size);
}

rs.pipe(res);

修改默认端口

node_modules/http-server/bin/http-server

1
portfinder.basePort = 80;

Etag乱码问题

/node_modules/ecstatic/lib/ecstatic/etag.js

1
return JSON.stringify([stat.ino, stat.size, stat.mtime.toJSON()].join('-'));

评论