Shared同步脚本
This commit is contained in:
102
client/sync-shared.js
Normal file
102
client/sync-shared.js
Normal file
@@ -0,0 +1,102 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* 同步服务端 shared 目录到客户端
|
||||
* 用法: node sync-shared.js
|
||||
*/
|
||||
|
||||
const fs = require('fs-extra');
|
||||
const path = require('path');
|
||||
|
||||
// 路径配置
|
||||
const SERVER_SHARED_PATH = path.resolve(__dirname, '../server/src/shared');
|
||||
const CLIENT_SHARED_PATH = path.resolve(__dirname, 'assets/scripts/Shared');
|
||||
|
||||
/**
|
||||
* 同步目录
|
||||
*/
|
||||
async function syncShared() {
|
||||
console.log('==========================================');
|
||||
console.log('开始同步 Shared 协议目录');
|
||||
console.log('==========================================');
|
||||
console.log('源目录:', SERVER_SHARED_PATH);
|
||||
console.log('目标目录:', CLIENT_SHARED_PATH);
|
||||
console.log('');
|
||||
|
||||
try {
|
||||
// 检查源目录是否存在
|
||||
if (!fs.existsSync(SERVER_SHARED_PATH)) {
|
||||
console.error('❌ 错误: 服务端 shared 目录不存在!');
|
||||
console.error(' 路径:', SERVER_SHARED_PATH);
|
||||
console.error(' 请确保服务端项目在正确的位置');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// 确保目标目录存在
|
||||
await fs.ensureDir(CLIENT_SHARED_PATH);
|
||||
|
||||
// 复制目录
|
||||
console.log('📦 正在复制文件...');
|
||||
await fs.copy(SERVER_SHARED_PATH, CLIENT_SHARED_PATH, {
|
||||
overwrite: true,
|
||||
errorOnExist: false,
|
||||
filter: (src) => {
|
||||
// 过滤掉不需要的文件
|
||||
const basename = path.basename(src);
|
||||
if (basename === 'node_modules' || basename === '.git') {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
console.log('✅ 同步完成!');
|
||||
console.log('');
|
||||
|
||||
// 列出同步的文件
|
||||
const files = await getFileList(CLIENT_SHARED_PATH);
|
||||
console.log(`共同步 ${files.length} 个文件:`);
|
||||
files.forEach(file => {
|
||||
const relativePath = path.relative(CLIENT_SHARED_PATH, file);
|
||||
console.log(' -', relativePath);
|
||||
});
|
||||
|
||||
console.log('');
|
||||
console.log('==========================================');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 同步失败:', error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归获取目录下所有文件
|
||||
*/
|
||||
async function getFileList(dir) {
|
||||
const files = [];
|
||||
|
||||
async function walk(currentPath) {
|
||||
const items = await fs.readdir(currentPath);
|
||||
|
||||
for (const item of items) {
|
||||
const itemPath = path.join(currentPath, item);
|
||||
const stat = await fs.stat(itemPath);
|
||||
|
||||
if (stat.isDirectory()) {
|
||||
await walk(itemPath);
|
||||
} else {
|
||||
files.push(itemPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await walk(dir);
|
||||
return files;
|
||||
}
|
||||
|
||||
// 执行同步
|
||||
syncShared().catch(error => {
|
||||
console.error('未知错误:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user