2020-09-07 17:48:39 +08:00

86 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const fs = require('fs');
const path = require('path');
console.log(process.argv);
let root = '';
const pathArgIndex = process.argv.indexOf('--path');
if (pathArgIndex >= 0) {
root = process.argv[pathArgIndex + 1];
}
if (!root) {
throw new Error('Can\'t find path argument');
}
function cloneStr(str, times) {
let count = times;
const arr = [];
while (count > 0) {
arr.push(str);
count -= 1;
}
return arr.join('');
}
function createTemplateFile(root, internalPath, fileName) {
// 不是文件夹,则添加type属性为文件后缀名
const fileTypeSrc = path.extname(fileName);
const fileType = fileTypeSrc.substring(1);
const baseName = path.basename(fileName, fileTypeSrc);
const filePath = path.join(root, internalPath);
const pieces = filePath.split(path.sep);
const depPrefix = cloneStr('../', pieces.length - 1);
const content = fs.readFileSync(path.join(filePath, fileName), {
encoding: 'utf8',
});
const pathList = (internalPath.split(path.sep) || []).filter(p => !!p);
const modulePathStr = JSON.stringify(pathList).replace(/\"/g, '\'');
const templateContent = `
import ResultFile from '${depPrefix}model/ResultFile';
import { IResultFile } from '${depPrefix}types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'${baseName}',
'${fileType || ''}',
\`
${content}
\`,
);
return [${modulePathStr}, file];
}
`;
const targetFile = path.join(filePath, `${fileName}.ts`);
console.log(`=== Create File: ${targetFile}`);
fs.writeFileSync(targetFile, templateContent);
}
function fileDisplay(root, internalPath) {
const dirPath = path.join(root, internalPath);
const filesList = fs.readdirSync(dirPath);
for (let i = 0; i < filesList.length; i++) {
// 描述此文件/文件夹的对象
const fileName = filesList[i];
// 拼接当前文件的路径(上一层路径+当前file的名字)
const filePath = path.join(dirPath, fileName);
// 根据文件路径获取文件信息返回一个fs.Stats对象
const stats = fs.statSync(filePath);
if (stats.isDirectory()) {
// 递归调用
fileDisplay(root, path.join(internalPath, fileName));
} else {
createTemplateFile(root, internalPath, fileName);
}
}
}
// 调用函数遍历根目录,同时传递 文件夹路径和对应的数组
// 请使用同步读取
fileDisplay(root, '');
// 读取完毕则写入到txt文件中
// fs.writeFileSync('./data.txt', JSON.stringify(arr));