module-migration-tool
Version:
分析项目文件依赖并迁移到新项目的工具
125 lines (110 loc) • 3.61 kB
JavaScript
/**
* 配置工具函数
*/
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,
}