ncpub-multipage-demo-develo.../config/genModelConfig.js

104 lines
3.4 KiB
JavaScript
Raw Permalink Normal View History

2025-03-09 11:34:19 +08:00
/*
* @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]);