132 lines
3.6 KiB
JavaScript
132 lines
3.6 KiB
JavaScript
|
|
#!/usr/bin/env node
|
||
|
|
|
||
|
|
const { execSync } = require('child_process');
|
||
|
|
const path = require('path');
|
||
|
|
const fs = require('fs');
|
||
|
|
const readline = require('readline');
|
||
|
|
|
||
|
|
function loadEnv(filePath) {
|
||
|
|
if (!fs.existsSync(filePath)) return {};
|
||
|
|
const content = fs.readFileSync(filePath, 'utf8');
|
||
|
|
const env = {};
|
||
|
|
content.split('\n').forEach((line) => {
|
||
|
|
const match = line.match(/^([^=:#]+?)=(.*)$/);
|
||
|
|
if (match) {
|
||
|
|
env[match[1].trim()] = match[2].trim().replace(/^['"](.*)['"]$/, '$1');
|
||
|
|
}
|
||
|
|
});
|
||
|
|
return env;
|
||
|
|
}
|
||
|
|
|
||
|
|
function getComponentLibs(env) {
|
||
|
|
const libs = [];
|
||
|
|
|
||
|
|
libs.push({
|
||
|
|
name: 'cpms_web_component (默认)',
|
||
|
|
path: path.resolve(__dirname, '../cpms_web_component'),
|
||
|
|
useKey: null,
|
||
|
|
usePath: null,
|
||
|
|
});
|
||
|
|
|
||
|
|
for (const key in env) {
|
||
|
|
if (key.startsWith('COMPONENT_LIB_') && key !== 'COMPONENT_LIB_PATH') {
|
||
|
|
libs.push({
|
||
|
|
name: key.replace('COMPONENT_LIB_', ''),
|
||
|
|
path: path.resolve(__dirname, env[key]),
|
||
|
|
useKey: key.replace('COMPONENT_LIB_', ''),
|
||
|
|
usePath: null,
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (env.COMPONENT_LIB_PATH) {
|
||
|
|
libs.push({
|
||
|
|
name: '自定义路径',
|
||
|
|
path: path.resolve(__dirname, env.COMPONENT_LIB_PATH),
|
||
|
|
useKey: null,
|
||
|
|
usePath: env.COMPONENT_LIB_PATH,
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
return libs;
|
||
|
|
}
|
||
|
|
|
||
|
|
async function selectLib(libs) {
|
||
|
|
if (libs.length === 1) return libs[0];
|
||
|
|
|
||
|
|
console.log('📦 请选择要使用的组件库:');
|
||
|
|
libs.forEach((lib, i) => {
|
||
|
|
const exists = fs.existsSync(lib.path) ? '✅' : '❌';
|
||
|
|
console.log(` ${i + 1}. ${lib.name} ${exists}`);
|
||
|
|
console.log(` ${lib.path}`);
|
||
|
|
});
|
||
|
|
console.log(' 0. 使用 npm 版本');
|
||
|
|
|
||
|
|
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
||
|
|
return new Promise((resolve) => {
|
||
|
|
rl.question(`\n请输入选项 (0-${libs.length},回车默认): `, (answer) => {
|
||
|
|
rl.close();
|
||
|
|
if (answer === '0') resolve(null);
|
||
|
|
else if (answer && /^\d+$/.test(answer)) {
|
||
|
|
const idx = parseInt(answer) - 1;
|
||
|
|
resolve(idx >= 0 && idx < libs.length ? libs[idx] : libs[0]);
|
||
|
|
} else {
|
||
|
|
resolve(libs[0]);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
async function main() {
|
||
|
|
const localEnv = loadEnv(path.resolve(__dirname, '.env.local'));
|
||
|
|
const libs = getComponentLibs(localEnv);
|
||
|
|
|
||
|
|
console.log('🚀 启动本地调试模式...\n');
|
||
|
|
const selected = await selectLib(libs);
|
||
|
|
|
||
|
|
const mergedEnv = { ...process.env, ...localEnv, LOCAL_DEBUG: 'true' };
|
||
|
|
|
||
|
|
if (!selected) {
|
||
|
|
console.log('\n📦 使用 npm 版本');
|
||
|
|
delete mergedEnv.COMPONENT_LIB;
|
||
|
|
delete mergedEnv.COMPONENT_LIB_PATH;
|
||
|
|
} else {
|
||
|
|
const exists = fs.existsSync(selected.path);
|
||
|
|
if (!exists) {
|
||
|
|
console.warn(`\n⚠️ 组件库不存在: ${selected.name}`);
|
||
|
|
console.warn(` ${selected.path}`);
|
||
|
|
console.warn(' 将使用 npm 版本');
|
||
|
|
delete mergedEnv.COMPONENT_LIB;
|
||
|
|
delete mergedEnv.COMPONENT_LIB_PATH;
|
||
|
|
} else {
|
||
|
|
console.log(`\n📦 ${selected.name}`);
|
||
|
|
console.log(`📍 ${selected.path}`);
|
||
|
|
if (selected.useKey) {
|
||
|
|
mergedEnv.COMPONENT_LIB = selected.useKey;
|
||
|
|
delete mergedEnv.COMPONENT_LIB_PATH;
|
||
|
|
} else if (selected.usePath) {
|
||
|
|
mergedEnv.COMPONENT_LIB_PATH = selected.usePath;
|
||
|
|
delete mergedEnv.COMPONENT_LIB;
|
||
|
|
} else {
|
||
|
|
delete mergedEnv.COMPONENT_LIB;
|
||
|
|
delete mergedEnv.COMPONENT_LIB_PATH;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log('\n⏳ 启动 Vite...\n');
|
||
|
|
|
||
|
|
try {
|
||
|
|
execSync('npx vite --port 3000 --open --strictPort false', {
|
||
|
|
stdio: 'inherit',
|
||
|
|
cwd: process.cwd(),
|
||
|
|
env: mergedEnv,
|
||
|
|
});
|
||
|
|
} catch (error) {
|
||
|
|
console.error('❌ 启动失败:', error.message);
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
main();
|