Skip to content

Commit 550853f

Browse files
committed
fix: 兼容低版本 Node.js(>=14),解决 cpSync 不可用问题
Windows 用户报告 SyntaxError: 'fs' does not provide an export named 'cpSync'。 根因:cpSync 是 Node 16.7+ API,低版本不支持。 修复: - 新增 copyDirSync() 兼容函数,优先用 cpSync,不可用时手动递归复制 - 添加 engines 字段声明最低 Node 14+ 要求
1 parent 9ce7f72 commit 550853f

2 files changed

Lines changed: 29 additions & 7 deletions

File tree

bin/superpowers-zh.js

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,28 @@
11
#!/usr/bin/env node
22

3-
import { existsSync, mkdirSync, cpSync, readdirSync, readFileSync, writeFileSync } from 'fs';
4-
import { resolve, dirname } from 'path';
3+
import { existsSync, mkdirSync, cpSync, readdirSync, readFileSync, writeFileSync, copyFileSync, statSync } from 'fs';
4+
import { resolve, dirname, join } from 'path';
55
import { fileURLToPath } from 'url';
66

7+
// Node 14/16 兼容:cpSync 在 Node 16.7+ 才可用
8+
function copyDirSync(src, dest) {
9+
if (typeof cpSync === 'function') {
10+
cpSync(src, dest, { recursive: true });
11+
return;
12+
}
13+
// 手动递归复制(兼容 Node 14+)
14+
mkdirSync(dest, { recursive: true });
15+
for (const entry of readdirSync(src, { withFileTypes: true })) {
16+
const srcPath = join(src, entry.name);
17+
const destPath = join(dest, entry.name);
18+
if (entry.isDirectory()) {
19+
copyDirSync(srcPath, destPath);
20+
} else {
21+
copyFileSync(srcPath, destPath);
22+
}
23+
}
24+
}
25+
726
const __dirname = dirname(fileURLToPath(import.meta.url));
827
const PKG = JSON.parse(readFileSync(resolve(__dirname, '..', 'package.json'), 'utf8'));
928
const SKILLS_SRC = resolve(__dirname, '..', 'skills');
@@ -252,7 +271,7 @@ function install() {
252271

253272
if (existsSync(detectPath)) {
254273
mkdirSync(dest, { recursive: true });
255-
cpSync(SKILLS_SRC, dest, { recursive: true });
274+
copyDirSync(SKILLS_SRC, dest);
256275
const count = countDirs(dest);
257276
console.log(` ✅ ${target.name}: ${count} 个 skills -> ${dest}`);
258277
installed++;
@@ -276,21 +295,21 @@ function install() {
276295
if (target.name === 'Claude Code' && existsSync(AGENTS_SRC)) {
277296
const agentsDest = resolve(PROJECT_DIR, '.claude', 'agents');
278297
mkdirSync(agentsDest, { recursive: true });
279-
cpSync(AGENTS_SRC, agentsDest, { recursive: true });
298+
copyDirSync(AGENTS_SRC, agentsDest);
280299
}
281300
}
282301
}
283302

284303
if (installed === 0) {
285304
const dest = resolve(PROJECT_DIR, '.claude', 'skills');
286305
mkdirSync(dest, { recursive: true });
287-
cpSync(SKILLS_SRC, dest, { recursive: true });
306+
copyDirSync(SKILLS_SRC, dest);
288307
console.log(` ✅ 默认安装: ${countDirs(dest)} 个 skills -> ${dest}`);
289308

290309
if (existsSync(AGENTS_SRC)) {
291310
const agentsDest = resolve(PROJECT_DIR, '.claude', 'agents');
292311
mkdirSync(agentsDest, { recursive: true });
293-
cpSync(AGENTS_SRC, agentsDest, { recursive: true });
312+
copyDirSync(AGENTS_SRC, agentsDest);
294313
console.log(` ✅ 默认安装: agents -> ${agentsDest}`);
295314
}
296315
}

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
{
22
"name": "superpowers-zh",
3-
"version": "1.1.3",
3+
"version": "1.1.4",
4+
"engines": {
5+
"node": ">=14.0.0"
6+
},
47
"description": "AI 编程超能力中文增强版 — superpowers(99k+ ⭐)完整汉化 + 6 个中国原创 skills,支持 OpenClaw / Claude Code / Cursor / Windsurf / Kiro / Gemini CLI 等 14 款工具",
58
"type": "module",
69
"main": ".opencode/plugins/superpowers.js",

0 commit comments

Comments
 (0)