目標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、庫即可以實現 完成代碼瀏覽器