当前仓库属于关闭状态,部分功能使用受限,详情请查阅 仓库状态说明
3 Star 14 Fork 0

NoahLiu/FETools
关闭

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
dev.js 2.46 KB
一键复制 编辑 原始数据 按行查看 历史
NoahLiu 提交于 2021-01-11 23:42 +08:00 . 开始做知识库
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);
}
})
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
NodeJS
1
https://gitee.com/noahliu0911/fetools.git
git@gitee.com:noahliu0911/fetools.git
noahliu0911
fetools
FETools
master

搜索帮助