Koa系列-Livereload:koa-livereload
2019-03-13
#koa
字数统计:7.6k 字
阅读时长 ≈ 7 分钟
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
| function livereload(opts) { opts = opts || {}; var port = opts.port || 35729; var src = opts.src || "' + (location.protocol || 'http:') + '//' + (location.hostname || 'localhost') + ':" + port + "/livereload.js?snipver=1"; var snippet = "\n<script type=\"text/javascript\">document.write('<script src=\"" + src + "\" type=\"text/javascript\"><\\/script>')</script>\n"; return (ctx, next) => next().then(() => { if (ctx.response.type && !ctx.response.type.includes('html')) return; if (opts.excludes) { var path = ctx.path; if (opts.excludes.some(exclude => path.startsWith(exclude))) return; }
if (Buffer.isBuffer(ctx.body)) { ctx.body = ctx.body.toString(); }
if (typeof ctx.body === 'string') { if (ctx.body.match(/livereload.js/)) return; ctx.body = ctx.body.replace(/<\/body>/, snippet + "<\/body>"); }
if (ctx.body && typeof ctx.body.pipe === 'function') { var injecter = new StreamInjecter({ matchRegExp : /(<\/body>)/, inject : snippet, replace : snippet + "$1", ignore : /livereload.js/ }); var size = +ctx.response.header['content-length'];
if (size) ctx.set('Content-Length', size + Buffer.byteLength(snippet)); ctx.body = ctx.body.pipe(injecter); } }); }
|
应用程序的热更新,现在已经有了很好的选择,如 koa-webpack
, nodemon
, pm2
等。