gaoluyang
2026-06-24 712aa51536236d43e87273e4ce45ac5691dffad8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/usr/bin/env node
import { readFileSync, writeFileSync, readdirSync, statSync } from 'node:fs';
import { join, relative, dirname } from 'node:path';
 
const projectRoot = 'D:/beforeProject/yudao-ui-admin-vben/web-antd-standalone';
 
// 递归获取所有 .ts, .tsx, .vue, .js 文件
function getAllFiles(dir, files = []) {
  const entries = readdirSync(dir);
  for (const entry of entries) {
    const fullPath = join(dir, entry);
    if (statSync(fullPath).isDirectory()) {
      if (!['node_modules', 'dist', '.git'].includes(entry)) {
        getAllFiles(fullPath, files);
      }
    } else if (/\.(ts|tsx|vue|js|mjs|cjs)$/.test(entry)) {
      files.push(fullPath);
    }
  }
  return files;
}
 
// 计算从源文件到目标包的相对路径
function getRelativePath(fromFile, packageName) {
  const fromDir = dirname(fromFile);
 
  // 映射包名到目录路径
  const packagePaths = {
    '@vben/access': 'src/packages/effects/access/src',
    '@vben/common-ui': 'src/packages/effects/common-ui/src',
    '@vben/hooks': 'src/packages/effects/hooks/src',
    '@vben/layouts': 'src/packages/effects/layouts/src',
    '@vben/plugins': 'src/packages/effects/plugins/src',
    '@vben/request': 'src/packages/effects/request/src',
    '@vben/constants': 'src/packages/constants/src',
    '@vben/icons': 'src/packages/icons/src',
    '@vben/locales': 'src/packages/locales/src',
    '@vben/preferences': 'src/packages/preferences/src',
    '@vben/stores': 'src/packages/stores/src',
    '@vben/styles': 'src/packages/styles/src',
    '@vben/types': 'src/packages/types/src',
    '@vben/utils': 'src/packages/utils/src',
    '@vben-core/composables': 'src/packages/@core/composables/src',
    '@vben-core/design': 'src/packages/@core/base/design/src',
    '@vben-core/form-ui': 'src/packages/@core/ui-kit/form-ui/src',
    '@vben-core/icons': 'src/packages/@core/base/icons/src',
    '@vben-core/layout-ui': 'src/packages/@core/ui-kit/layout-ui/src',
    '@vben-core/menu-ui': 'src/packages/@core/ui-kit/menu-ui/src',
    '@vben-core/popup-ui': 'src/packages/@core/ui-kit/popup-ui/src',
    '@vben-core/preferences': 'src/packages/@core/preferences/src',
    '@vben-core/shadcn-ui': 'src/packages/@core/ui-kit/shadcn-ui/src',
    '@vben-core/shared': 'src/packages/@core/base/shared/src',
    '@vben-core/tabs-ui': 'src/packages/@core/ui-kit/tabs-ui/src',
    '@vben-core/typings': 'src/packages/@core/base/typings/src',
    '@vben/vite-config': 'src/internal/vite-config/src',
    '@vben/node-utils': 'src/internal/node-utils/src',
    '@vben/tailwind-config': 'src/internal/tailwind-config/src',
    '@vben/tsconfig': 'src/internal/tsconfig',
  };
 
  const targetPath = packagePaths[packageName];
  if (!targetPath) return null;
 
  const relPath = relative(fromDir, join(projectRoot, targetPath));
  return relPath.startsWith('.') ? relPath : './' + relPath;
}
 
// 处理单个文件
function processFile(filePath) {
  let content = readFileSync(filePath, 'utf-8');
  let modified = false;
 
  // 替换 @vben/* 和 @vben-core/* 导入
  const importRegex = /from\s+['"](@vben(?:-core)?\/[^'"]+)['"]/g;
  const importRegex2 = /import\s*\(\s*['"](@vben(?:-core)?\/[^'"]+)['"]\s*\)/g;
 
  content = content.replace(importRegex, (match, packageName) => {
    const relativePath = getRelativePath(filePath, packageName);
    if (relativePath) {
      modified = true;
      return `from '${relativePath}'`;
    }
    return match;
  });
 
  content = content.replace(importRegex2, (match, packageName) => {
    const relativePath = getRelativePath(filePath, packageName);
    if (relativePath) {
      modified = true;
      return `import('${relativePath}')`;
    }
    return match;
  });
 
  if (modified) {
    writeFileSync(filePath, content);
    console.log(`Updated: ${filePath}`);
  }
 
  return modified;
}
 
// 主函数
const srcDir = join(projectRoot, 'src');
const files = getAllFiles(srcDir);
 
let updatedCount = 0;
for (const file of files) {
  if (processFile(file)) {
    updatedCount++;
  }
}
 
console.log(`\nTotal files updated: ${updatedCount}`);