refactor: migrate configuration to YAML-based system

This commit is contained in:
test
2026-03-07 11:30:09 +08:00
parent 48f1f51d76
commit c13be9e19a
27 changed files with 1716 additions and 1638 deletions

View File

@@ -0,0 +1,125 @@
/**
* Migration Script: .env to config.yaml
*
* Usage: npx tsx scripts/migrate-env-to-yaml.ts
*
* This script migrates the old .env configuration to the new YAML format.
* ERP configuration is NOT migrated as it's now stored in the database per user.
*/
import * as fs from 'fs'
import * as path from 'path'
import yaml from 'js-yaml'
const ENV_PATH = path.resolve(process.cwd(), '.env')
const YAML_PATH = path.resolve(process.cwd(), 'config.yaml')
const BACKUP_PATH = path.resolve(process.cwd(), '.env.backup')
interface EnvConfig {
[key: string]: string
}
function parseEnvFile(content: string): EnvConfig {
const result: EnvConfig = {}
const lines = content.split('\n')
for (const line of lines) {
const trimmed = line.trim()
if (!trimmed || trimmed.startsWith('#')) continue
const [key, ...valueParts] = trimmed.split('=')
if (key && valueParts.length > 0) {
result[key.trim()] = valueParts.join('=').trim()
}
}
return result
}
function migrate() {
console.log('🔄 Starting migration from .env to config.yaml...\n')
if (!fs.existsSync(ENV_PATH)) {
console.error('❌ .env file not found at:', ENV_PATH)
process.exit(1)
}
const envContent = fs.readFileSync(ENV_PATH, 'utf-8')
const env = parseEnvFile(envContent)
// Build configuration object (without ERP)
const config = {
database: {
activeType: (env.DB_TYPE || 'mysql').toLowerCase() as 'mysql' | 'sqlserver',
mysql: {
host: env.DB_MYSQL_HOST || 'localhost',
port: parseInt(env.DB_MYSQL_PORT || '3306', 10),
database: env.DB_NAME || '',
username: env.DB_USERNAME || '',
password: env.DB_PASSWORD || '',
charset: env.DB_MYSQL_CHARSET || 'utf8mb4'
},
sqlserver: {
server: env.DB_SERVER || 'localhost',
port: parseInt(env.DB_SQLSERVER_PORT || '1433', 10),
database: env.DB_NAME || '',
username: env.DB_USERNAME || '',
password: env.DB_PASSWORD || '',
driver: env.DB_SQLSERVER_DRIVER || 'ODBC Driver 18 for SQL Server',
trustServerCertificate: env.DB_TRUST_SERVER_CERTIFICATE === 'yes'
}
},
paths: {
dataDir: env.PATH_DATA_DIR || './data/',
defaultOutput: env.PATH_DEFAULT_OUTPUT || 'output.xlsx',
validationOutput: env.PATH_VALIDATION_OUTPUT || 'validation-result.xlsx'
},
extraction: {
batchSize: parseInt(env.EXTRACTION_BATCH_SIZE || '100', 10),
verbose: env.EXTRACTION_VERBOSE !== 'false',
autoConvert: env.EXTRACTION_AUTO_CONVERT !== 'false',
mergeBatches: env.EXTRACTION_MERGE_BATCHES !== 'false',
enableDbPersistence: env.EXTRACTION_ENABLE_DB_PERSISTENCE !== 'false'
},
validation: {
dataSource: env.VALIDATION_DATA_SOURCE || 'database_full',
batchSize: parseInt(env.VALIDATION_BATCH_SIZE || '2000', 10),
matchMode: env.VALIDATION_MATCH_MODE || 'substring',
enableCrud: env.VALIDATION_ENABLE_CRUD === 'true',
defaultManager: env.VALIDATION_DEFAULT_MANAGER || ''
},
orderResolution: {
tableName: env.DB_TABLE_NAME || '',
productionIdField: env.DB_FIELD_PRODUCTION_ID || '',
orderNumberField: env.DB_FIELD_ORDER_NUMBER || ''
}
}
// Backup .env
if (fs.existsSync(ENV_PATH)) {
fs.copyFileSync(ENV_PATH, BACKUP_PATH)
console.log('📁 Backed up .env to .env.backup')
}
// Write YAML with header comments
const header = `# ================================\n# ERPAuto 配置文件\n# ================================\n# 由 .env 迁移生成\n# 迁移时间:${new Date().toISOString()}\n# 注意ERP 配置已迁移到数据库 (dbo_BIPUsers 表)\n# ================================\n\n`
const yamlContent = yaml.dump(config, {
indent: 2,
lineWidth: -1,
noRefs: true,
quotingType: '"',
forceQuotes: false
})
fs.writeFileSync(YAML_PATH, header + yamlContent, 'utf-8')
console.log('✅ Migration completed successfully!')
console.log(`📁 Config saved to: ${YAML_PATH}`)
console.log('\n📋 Next steps:')
console.log(' 1. Review config.yaml and verify all values')
console.log(' 2. Test the application thoroughly')
console.log(' 3. Remove .env file when confident (optional)\n')
}
migrate()