feat: add template create tool

This commit is contained in:
春希 2020-04-20 13:52:34 +08:00
parent abc602b4a1
commit e906683a1a
2 changed files with 88 additions and 1 deletions

View File

@ -9,10 +9,12 @@
"scripts": {
"build": "rimraf lib && tsc",
"demo": "ts-node -r tsconfig-paths/register ./src/demo/main.ts",
"test": "ava"
"test": "ava",
"template": "node ./tools/createTemplate.js"
},
"dependencies": {
"@ali/am-eslint-config": "*",
"@babel/parser": "^7.9.4",
"@types/prettier": "^1.19.1",
"change-case": "^3.1.0",
"prettier": "^2.0.2",

View File

@ -0,0 +1,85 @@
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));