fix-hbuilderx-scoped.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #!/usr/bin/env node
  2. const fs = require('fs');
  3. const path = require('path');
  4. // HBuilderX 内部的 scoped.js 路径
  5. const SCOPED_FILE = '/Applications/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/@vue/component-compiler-utils/dist/stylePlugins/scoped.js';
  6. if (!fs.existsSync(SCOPED_FILE)) {
  7. console.error('错误:找不到 HBuilderX 的 scoped.js 文件');
  8. console.error(`路径:${SCOPED_FILE}`);
  9. process.exit(1);
  10. }
  11. console.log(`正在修复 ${SCOPED_FILE}...`);
  12. let content = fs.readFileSync(SCOPED_FILE, 'utf8');
  13. // 修复 1: n.spaces.before = n.spaces.after = ''; (第 40 行)
  14. content = content.replace(
  15. /n\.value = ' ';[\s\n]*n\.spaces\.before = n\.spaces\.after = '';/,
  16. `n.value = ' ';\n n.spaces = n.spaces || {}; n.spaces.before = ''; n.spaces.after = '';`
  17. );
  18. // 修复 2: n.value = n.spaces.before = n.spaces.after = ''; (::v-deep)
  19. content = content.replace(
  20. /if \(n\.type === '::v-deep' \) \{[\s\n]*n\.value = n\.spaces\.before = n\.spaces\.after = '';[\s\n]*return false;[\s\n]*\}/,
  21. `if (n.type === '::v-deep') {\n n.value = '';\n n.spaces = { before: '', after: '' };\n return false;\n }`
  22. );
  23. // 修复 3: node.spaces.after = '';
  24. content = content.replace(
  25. /if \(node\) \{[\s\n]*node\.spaces\.after = '';[\s\n]\}/,
  26. `if (node) {\n node.spaces = node.spaces || {}; node.spaces.after = '';`
  27. );
  28. // 修复 4: selector.first.spaces.before = '';
  29. content = content.replace(
  30. /selector\.first\.spaces\.before = '';/,
  31. `if (selector.first && selector.first.spaces) { selector.first.spaces.before = ''; }`
  32. );
  33. fs.writeFileSync(SCOPED_FILE, content, 'utf8');
  34. console.log('✅ 修复完成!请重启 HBuilderX 并重新编译。');