UNPKG

module-migration-tool

Version:

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

104 lines (91 loc) 2.78 kB
/** * Vue文件分析器 */ const fs = require("fs") const { analyzeJavaScript, findDependenciesByRegex } = require("./jsAnalyzer") const { analyzeCSS } = require("./cssAnalyzer") /** * 简单解析Vue文件的不同部分 * @param {string} content - Vue文件内容 * @returns {Object} 包含script、template和style部分的对象 */ function parseVueContent(content) { const parts = { script: "", template: "", style: "", } // 提取<script>部分 const scriptRegex = /<script(?:\s+[^>]*)?>([\s\S]*?)<\/script>/g let scriptMatch while ((scriptMatch = scriptRegex.exec(content)) !== null) { parts.script += scriptMatch[1] + "\n" } // 提取<template>部分 const templateRegex = /<template(?:\s+[^>]*)?>([\s\S]*?)<\/template>/g let templateMatch while ((templateMatch = templateRegex.exec(content)) !== null) { parts.template += templateMatch[1] + "\n" } // 提取<style>部分 const styleRegex = /<style(?:\s+[^>]*)?>([\s\S]*?)<\/style>/g let styleMatch while ((styleMatch = styleRegex.exec(content)) !== null) { parts.style += styleMatch[1] + "\n" } return parts } /** * 分析Vue文件依赖 * @param {string} filePath - 文件路径 * @param {string} content - 文件内容 * @returns {string[]} 依赖路径数组 */ function analyzeVue(filePath, content) { const dependencies = [] const parts = parseVueContent(content) // 分析<script>中的依赖 if (parts.script) { try { const scriptDeps = analyzeJavaScript(filePath, parts.script) dependencies.push(...scriptDeps) } catch (error) { console.error(`解析Vue脚本部分失败: ${filePath}`, error.message) // 退回到正则方式 const regexDeps = findDependenciesByRegex(parts.script) dependencies.push(...regexDeps) } } // 分析<style>中的依赖 if (parts.style) { const styleDeps = analyzeCSS(filePath, parts.style) dependencies.push(...styleDeps) } // 分析<template>中的src属性 const srcRegex = /src=["']([^"']+)["']/g let srcMatch while ((srcMatch = srcRegex.exec(content)) !== null) { dependencies.push(srcMatch[1]) } // 返回去重后的依赖列表 return [...new Set(dependencies)] } /** * 从文件中分析Vue依赖 * @param {string} filePath - 文件路径 * @returns {string[]} 依赖路径数组 */ function analyzeFile(filePath) { try { const content = fs.readFileSync(filePath, "utf-8") return analyzeVue(filePath, content) } catch (error) { console.error(`读取文件 ${filePath} 失败:`, error.message) return [] } } module.exports = { analyzeVue, analyzeFile, parseVueContent, }