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' ;
55import { 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+
726const __dirname = dirname ( fileURLToPath ( import . meta. url ) ) ;
827const PKG = JSON . parse ( readFileSync ( resolve ( __dirname , '..' , 'package.json' ) , 'utf8' ) ) ;
928const 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 }
0 commit comments