104 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
/*
 | 
						||
 * @Author: xuyangt
 | 
						||
 * @Description:
 | 
						||
 * @Date: 2024-01-09 13:47:34
 | 
						||
 * @LastEditTime: 2024-04-19 17:08:48
 | 
						||
 */
 | 
						||
const fs = require('fs');
 | 
						||
const XLSX = require('xlsx');
 | 
						||
const path = require('path');
 | 
						||
 | 
						||
function readColumnFromExcel(excelPath, sheetName, columnName) {
 | 
						||
    // 读取Excel文件
 | 
						||
    const workbook = XLSX.readFile(excelPath);
 | 
						||
    // 获取指定的sheet
 | 
						||
    const worksheet = workbook.Sheets[sheetName];
 | 
						||
    // 将sheet转换为JSON对象数组
 | 
						||
    const jsonData = XLSX.utils.sheet_to_json(worksheet, {header:1});
 | 
						||
    // 获取列名在第一行的索引
 | 
						||
    const columnIndex = jsonData[0].indexOf(columnName);
 | 
						||
    // 读取指定列的数据
 | 
						||
    const columnData = jsonData.map(row => row[columnIndex]);
 | 
						||
    // 移除列名
 | 
						||
    columnData.shift();
 | 
						||
    return columnData;
 | 
						||
}
 | 
						||
//在指定目录下创建文件夹
 | 
						||
function createDir(dirPath) {
 | 
						||
		if (!fs.existsSync(dirPath)) {
 | 
						||
				fs.mkdirSync(dirPath);
 | 
						||
		}
 | 
						||
}
 | 
						||
//在指定目录下创建JSON文件
 | 
						||
function createJsonFile(dirPath,fileName,data){
 | 
						||
		fs.writeFileSync(path.join(dirPath,fileName),JSON.stringify(data,null,2));
 | 
						||
}
 | 
						||
//往指定目录下的JSON文件中添加数据
 | 
						||
function addJsonFile(dirPath,fileName,data){
 | 
						||
		let filePath = path.join(dirPath,fileName);
 | 
						||
		let fileData = fs.readFileSync(filePath);
 | 
						||
		let jsonData = JSON.parse(fileData);
 | 
						||
		jsonData = Object.assign(jsonData,data);
 | 
						||
		fs.writeFileSync(filePath,JSON.stringify(jsonData,null,2));
 | 
						||
}
 | 
						||
function genModelConfig(excelPath) {
 | 
						||
    const sheetName = 'SM_APPPAGE';
 | 
						||
		const columnName = 'PAGEURL';
 | 
						||
		const columnData = readColumnFromExcel(excelPath, sheetName, columnName);
 | 
						||
		//过滤columnData中不以'/nccloud/resources‘开头或者不以'../../../../'开头的数据
 | 
						||
		const filterData = columnData.filter(item => {
 | 
						||
			return item.startsWith('/nccloud/resources') || item.startsWith('../../../../');
 | 
						||
		});
 | 
						||
		const modelConfig = {};
 | 
						||
		filterData.forEach(item=>{
 | 
						||
			let model = '',entryPath = '',target="";
 | 
						||
			if(item.indexOf('/nccloud/resources')>-1){
 | 
						||
				target='/nccloud/resources/';
 | 
						||
			}else if(item.indexOf('../../../../')>-1){
 | 
						||
				target='../../../../';
 | 
						||
			}
 | 
						||
			if(target){
 | 
						||
				try{
 | 
						||
					model = item.split(target)[1]?.split('/')[0];
 | 
						||
					if(item.includes('.html')){
 | 
						||
						entryPath ='./src/'+ item.split(target)[1]?.split(".html")[0]+'.js';
 | 
						||
					}else if(item.includes('.js')){
 | 
						||
						entryPath ='./src/'+ item.split(target)[1];
 | 
						||
					}
 | 
						||
					
 | 
						||
					if(model){
 | 
						||
						if( modelConfig[model]){
 | 
						||
							if(modelConfig[model].buildEntryPath.indexOf(entryPath)===-1){
 | 
						||
								modelConfig[model].buildEntryPath.push(entryPath);
 | 
						||
							}
 | 
						||
						}else{
 | 
						||
							modelConfig[model] = {
 | 
						||
								buildEntryPath:[entryPath]
 | 
						||
							}
 | 
						||
						}
 | 
						||
					}
 | 
						||
				}catch(e){
 | 
						||
					console.error("item",item);
 | 
						||
				}
 | 
						||
			}
 | 
						||
		});
 | 
						||
		//判断dist文件夹是否存在,不存在则创建
 | 
						||
		createDir(path.resolve(process.cwd(), './dist'));
 | 
						||
 | 
						||
		//判断dist/modelConfig文件夹是否存在,不存在则创建
 | 
						||
		createDir(path.resolve(process.cwd(), './dist/modelConfig'));
 | 
						||
		//遍历modelConfig对象,往dist/modelConfig文件夹下的json文件中添加数据
 | 
						||
		for(let key in modelConfig){
 | 
						||
			let data = modelConfig[key];
 | 
						||
			createDir(path.resolve(process.cwd(), `./dist/modelConfig/${key}`));
 | 
						||
			if(fs.existsSync(path.resolve(process.cwd(), `./dist/modelConfig/${key}/config.json`))){
 | 
						||
				addJsonFile(path.resolve(process.cwd(), `./dist/modelConfig/${key}`),`config.json`,data);
 | 
						||
			}else{
 | 
						||
				createJsonFile(path.resolve(process.cwd(), `./dist/modelConfig/${key}`),`config.json`,data);
 | 
						||
			}
 | 
						||
		}
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
genModelConfig(process.argv[2]);
 |