目标javascript
利用node实现一个实时的将md文档转换为html文件并在浏览器展现效果css
实现思路html
有了目标,剩下的就是思考一下怎么实现,总体思路以下java
const fs = require('fs');
const path = require('path');
const marked = require('marked');
const browserSync = require('browser-sync');
复制代码
定义路径node
由于须要将md转成html,须要定义目标路径(md)和生产路径(html)git
// 接受须要转换的文件路径
const target = path.join(__dirname, process.argv[2] || './test.md');
// 转换为html后保存的位置
let filename = target.replace(path.extname(target), '.html');
// 获取html的文件名, browserSync 使用
let indexPath = path.basename(filename);
复制代码
监听文件github
fs.watchFile
接受三个参数npm
watch
的文件// 监视文件的变化
fs.watchFile(target, { interval: 200 }, (curr, prev) => {
// ...
});
复制代码
监听文件作了哪些事情api
// 根据时间 判断文件是否变化
if (curr.mtime === prev.mtime) {
return false;
}
复制代码
marked
将md转换成 html// 读取文件 转换为新的html
fs.readFile(target, 'utf8', (err, data) => {
if (err) {
return throw err;
}
let html = marked(data);
fs.readFile(path.join(__dirname, 'github.css'), 'utf8', (err, css) => {
if (err) {
return throw err
}
html = templates
.replace('{{{content}}}', html)
.replace('{{{styles}}}', css);
fs.writeFile(
target.replace(path.extname(target), '.html'),
html,
'utf8',
err => {
browserSync.reload(indexPath);
}
);
});
});
复制代码
let templates = `<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style>{{{styles}}}</style> </head> <body> <div class="wy">{{{content}}}</div> </body> </html>`;
复制代码
实现这个效果,简单使用两个简单的API、库即可以实现 完成代码浏览器