直接上干货,代码如下
配置
package.json添加一条命令 npm run docs scripts里添加一个docs.js
//docs.js
const mammoth = require("mammoth");
const fs = require("fs");
const path = require("path");
const child_process = require('child_process');
const fileList = process.argv[2];
let baseUrl = `./src/docs/`;//路径
let options = { includeDefaultStyleMap: false };
const getStrLength = ( str ) => {
let processStr = "";
processStr = str.replace(/[\u0391-\uFFE5]/g,"aa");
return processStr.length;
}
function str2ab(s,f) {
var b = new Blob([s],{type:'text/plain'});
var r = new FileReader();
r.readAsArrayBuffer(b);
r.onload = function (){if(f)f.call(null,r.result)}
}
const action = ( name ) => {
return new Promise(( res,rej )=>{
let html = null;
if( /.html/.test(name) ){
return;
}
if( /.docx/.test(name) ){
mammoth.convertToHtml( { path: `${baseUrl}${name}` },options )
.then(function(result){
html = result.value + "";
let messages = result.messages;
html = html.replace(/<p>/,"<h3>");
html = html.replace(/<\/p>/,"</h3>");
html = html.split('</p>').join('</p>\n');
res( html );
})
.catch(( err )=>{ })
.done();
}else{
console.log("不支持的格式");return;
}
})
}
let files = fs.readdirSync(baseUrl);
if( fileList ){ files = fileList.split(',') };
let data = fs.readFileSync("./docsTemplate.html", 'utf-8');
files.forEach(async ( e )=>{
let html = await action( e );
let splitStr = '<div class="box">';
let splitArr = data.split(splitStr);
let prepareData = splitArr[0] + splitStr + '\n\n\n' + html + splitArr[1];
let htmlUrl = `${baseUrl}${ e.split('.').slice(0,-1).join('.') }.html`;
fs.writeFileSync( htmlUrl,prepareData );
console.log(`转换成功${ htmlUrl }`);
});
接下来就是html页面
//docsTemplate.html
<!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>
<head>
<body>
</body>
</html>