UNPKG

module-migration-tool

Version:

分析项目文件依赖并迁移到新项目的工具

125 lines (110 loc) 3.61 kB
/** * 配置工具函数 */ const path = require("path") const fs = require("fs") const defaultConfig = require("../../config/default") /** * 合并配置 * @param {Object} userConfig - 用户配置 * @returns {Object} 合并后的配置 */ function mergeConfig(userConfig = {}) { return { ...defaultConfig, ...userConfig, // 深度合并特定对象 alias: { ...defaultConfig.alias, ...userConfig.alias }, analysis: { ...defaultConfig.analysis, ...userConfig.analysis }, report: { ...defaultConfig.report, ...userConfig.report }, } } /** * 自动检测项目配置文件 * @param {string} projectRoot - 项目根目录 * @returns {Object} 检测到的配置 */ function detectProjectConfig(projectRoot) { // 初始化返回的配置对象 const detectedConfig = { alias: {}, } try { // 检查webpack配置 const webpackConfigPaths = [ path.join(projectRoot, "webpack.config.js"), path.join(projectRoot, "webpack.common.js"), path.join(projectRoot, "config", "webpack.config.js"), ] for (const configPath of webpackConfigPaths) { if (fs.existsSync(configPath)) { console.log(`找到Webpack配置: ${configPath}`) // TODO: 解析webpack配置中的alias } } // 检查vite配置 const viteConfigPaths = [ path.join(projectRoot, "vite.config.js"), path.join(projectRoot, "vite.config.ts"), ] for (const configPath of viteConfigPaths) { if (fs.existsSync(configPath)) { console.log(`找到Vite配置: ${configPath}`) // TODO: 解析vite配置中的alias } } // 检查tsconfig.json中的paths配置 const tsconfigPath = path.join(projectRoot, "tsconfig.json") if (fs.existsSync(tsconfigPath)) { try { console.log("找到tsconfig.json") const tsConfig = JSON.parse(fs.readFileSync(tsconfigPath, "utf-8")) if (tsConfig.compilerOptions && tsConfig.compilerOptions.paths) { console.log("检测到tsconfig.json中的路径别名") // 处理paths别名 const paths = tsConfig.compilerOptions.paths const baseUrl = tsConfig.compilerOptions.baseUrl || "." for (const [alias, targets] of Object.entries(paths)) { if (targets && targets.length > 0) { // 移除路径中的通配符如 /* const cleanAlias = alias.replace(/\/\*$/, "") const cleanTarget = targets[0].replace(/\/\*$/, "") detectedConfig.alias[cleanAlias] = path.join( projectRoot, baseUrl, cleanTarget ) } } } } catch (error) { console.error("解析tsconfig.json时出错:", error.message) } } } catch (error) { console.error("检测项目配置时出错:", error.message) } return detectedConfig } /** * 验证配置是否有效 * @param {Object} config - 配置对象 * @returns {boolean} 是否有效 */ function validateConfig(config) { // 检查必须的字段 if (!config.extensions || !Array.isArray(config.extensions)) { console.error("无效配置: extensions必须是数组") return false } if (!config.ignorePaths || !Array.isArray(config.ignorePaths)) { console.error("无效配置: ignorePaths必须是数组") return false } return true } module.exports = { mergeConfig, detectProjectConfig, validateConfig, }