replace-use-with-import.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // replace-use-with-import.js
  2. const fs = require('fs');
  3. const path = require('path');
  4. const targetDir = path.resolve(process.argv[2] || '.'); // 传入目录,默认当前目录
  5. // 读取目录,递归遍历文件
  6. function walk(dir) {
  7. let results = [];
  8. const list = fs.readdirSync(dir, { withFileTypes: true });
  9. for (const file of list) {
  10. const fullPath = path.join(dir, file.name);
  11. if (file.isDirectory()) {
  12. results = results.concat(walk(fullPath));
  13. } else if (file.isFile()) {
  14. if (/\.(vue|scss)$/.test(file.name)) {
  15. results.push(fullPath);
  16. }
  17. }
  18. }
  19. return results;
  20. }
  21. // 替换函数
  22. function replaceUseToImport(content) {
  23. // 正则匹配 @use "xxx" as *; 或 @use 'xxx' as *;
  24. const regex = /@use\s+(['"])([^'"]+)\1\s+as\s+\*;/g;
  25. return content.replace(regex, (match, quote, path) => {
  26. return `@import ${quote}${path}${quote};`;
  27. });
  28. }
  29. function main() {
  30. const files = walk(targetDir);
  31. console.log(`找到 ${files.length} 个文件,开始替换...`);
  32. let totalReplacements = 0;
  33. for (const filePath of files) {
  34. let content = fs.readFileSync(filePath, 'utf-8');
  35. const newContent = replaceUseToImport(content);
  36. if (newContent !== content) {
  37. fs.writeFileSync(filePath, newContent, 'utf-8');
  38. totalReplacements++;
  39. console.log(`替换完成: ${filePath}`);
  40. }
  41. }
  42. console.log(`总共替换了 ${totalReplacements} 个文件中的 @use -> @import`);
  43. }
  44. main();