mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-01-13 09:41:57 +00:00
86 lines
2.4 KiB
JavaScript
86 lines
2.4 KiB
JavaScript
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));
|