代码拉取完成,页面将自动刷新
const { watch, readFileSync, readdirSync, statSync, writeFileSync } = require("fs");
const { join } = require("path");
let inputDir = "vue/"
let outputDir = "js/"
if (process.platform === 'win32') {
inputDir = inputDir.replace(/\//, '\\');
outputDir = outputDir.replace(/\//, '\\');
}
function compileVue(fileName) {
// 获取目标文件
let vueFile = readFileSync(fileName, { encoding: "utf-8" });
let vueFileLines = vueFile.split("\r\n");
// 确定目标对象位置
let tpStart = vueFileLines.indexOf("<template>");
let tpEnd = vueFileLines.indexOf("</template>");
let scEnd = vueFileLines.indexOf("</script>");
let scStart = vueFileLines.indexOf("<script>");
// 获取模板
let template = vueFileLines.slice(tpStart + 1, tpEnd);
// 获取脚本
let script = vueFileLines.slice(scStart + 1, scEnd);
template = template.map(item => {
item = item.replace(/"/g, '\\"');
return item
})
let objStart = script.indexOf("export default {");
// 将模板插入脚本
script.splice(objStart + 2, 0, ` template: "${template.join("")}",`)
script = script.map(item => item.trim())
console.log(script);
// 将脚本写入文件
writeFileSync(fileName.replace(".vue", ".js").replace(inputDir, outputDir), script.join(""), { encoding: "utf-8" });
}
function compileJS(fileName) {
let jsFile = readFileSync(fileName, { encoding: "utf-8" });
writeFileSync(fileName.replace(inputDir, outputDir), jsFile, { encoding: "utf-8" });
}
function getFileType(fileName) {
let fileNameArr = fileName.split(".")
return fileNameArr[(fileNameArr.length - 1)].toLowerCase();
}
function compileFile(path) {
let type = getFileType(path);
console.log(path);
switch (type) {
case "vue":
compileVue(path)
break;
case "js":
compileJS(path)
break;
default:
console.log("未支持文件类型");
break;
}
}
function forEachDir(path) {
let dirs = readdirSync(path);
dirs.forEach(dir => {
let fullPath = join(path, dir);
let statInfo = statSync(fullPath)
if (statInfo.isDirectory()) {
forEachDir(fullPath);
} else {
compileFile(fullPath)
}
})
}
forEachDir(inputDir);
let fsWait = false;
watch(inputDir, {
recursive: true,
}, (eventType, fileName) => {
if (fileName && eventType === "change") {
if (fsWait) return;
fsWait = setTimeout(() => {
fsWait = false;
}, 1 * 100)
setTimeout(() => {
compileFile(join(inputDir, fileName));
}, 500);
}
})
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。