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