// replace-use-with-import.js const fs = require('fs'); const path = require('path'); const targetDir = path.resolve(process.argv[2] || '.'); // 传入目录,默认当前目录 // 读取目录,递归遍历文件 function walk(dir) { let results = []; const list = fs.readdirSync(dir, { withFileTypes: true }); for (const file of list) { const fullPath = path.join(dir, file.name); if (file.isDirectory()) { results = results.concat(walk(fullPath)); } else if (file.isFile()) { if (/\.(vue|scss)$/.test(file.name)) { results.push(fullPath); } } } return results; } // 替换函数 function replaceUseToImport(content) { // 正则匹配 @use "xxx" as *; 或 @use 'xxx' as *; const regex = /@use\s+(['"])([^'"]+)\1\s+as\s+\*;/g; return content.replace(regex, (match, quote, path) => { return `@import ${quote}${path}${quote};`; }); } function main() { const files = walk(targetDir); console.log(`找到 ${files.length} 个文件,开始替换...`); let totalReplacements = 0; for (const filePath of files) { let content = fs.readFileSync(filePath, 'utf-8'); const newContent = replaceUseToImport(content); if (newContent !== content) { fs.writeFileSync(filePath, newContent, 'utf-8'); totalReplacements++; console.log(`替换完成: ${filePath}`); } } console.log(`总共替换了 ${totalReplacements} 个文件中的 @use -> @import`); } main();