fengshuzi_coin-memo/deploy.mjs
lizhifeng 2a734468c8
2026-03-31 16:46:15 +08:00

125 lines
4 KiB
JavaScript

import { copyFileSync, existsSync, mkdirSync, rmSync } from 'fs';
import { join } from 'path';
import { homedir } from 'os';
// 定义基础路径
const BASE_PATH = join(
homedir(),
'Library/Mobile Documents/iCloud~md~obsidian/Documents/漂泊者及其影子'
);
const NOTE_DEMO_PATH = join(
homedir(),
'Library/Mobile Documents/iCloud~md~obsidian/Documents/note-demo'
);
// 定义所有 vault 的插件目录
const vaults = [
{
name: 'Mobile',
path: join(BASE_PATH, '.obsidian-mobile/plugins/obsidian-accounting')
},
{
name: 'Pro',
path: join(BASE_PATH, '.obsidian-pro/plugins/obsidian-accounting')
},
{
name: 'iPad',
path: join(BASE_PATH, '.obsidian-ipad/plugins/obsidian-accounting')
},
{
name: '2017',
path: join(BASE_PATH, '.obsidian-2017/plugins/obsidian-accounting')
},
{
name: 'Zhang',
path: join(BASE_PATH, '.obsidian-zhang/plugins/obsidian-accounting')
},
{
name: 'Note-Demo',
path: join(NOTE_DEMO_PATH, '.obsidian/plugins/obsidian-accounting')
}
];
// 需要复制的文件(都从 dist 目录)
const files = [
{ source: 'dist/main.js', target: 'main.js' },
{ source: 'dist/manifest.json', target: 'manifest.json' },
{ source: 'dist/styles.css', target: 'styles.css' },
{ source: 'dist/config.json', target: 'config.json' }
];
console.log('🚀 开始部署 Accounting 插件...\n');
let successCount = 0;
let failCount = 0;
vaults.forEach((vault) => {
console.log(`📁 部署到 ${vault.name} vault...`);
try {
// 确保目标目录存在
if (!existsSync(vault.path)) {
mkdirSync(vault.path, { recursive: true });
console.log(` ✓ 创建目录: ${vault.path}`);
}
// 复制文件
files.forEach((file) => {
if (!existsSync(file.source)) {
console.log(` ⚠️ 警告: ${file.source} 不存在`);
return;
}
const targetPath = join(vault.path, file.target);
// config.json 已存在时跳过(保留用户已配置的内容)
if (file.target === 'config.json' && existsSync(targetPath)) {
console.log(` ⏭ 跳过 ${file.target}(已存在,保留用户配置)`);
return;
}
copyFileSync(file.source, targetPath);
console.log(` ✓ 已复制 ${file.source}${file.target}`);
});
// 复制插件运行时所需的静态资源(不含文档截图)
const pluginAssets = ['wechat-donate.jpg'];
const assetsSource = 'assets';
const assetsTarget = join(vault.path, 'assets');
if (!existsSync(assetsTarget)) {
mkdirSync(assetsTarget, { recursive: true });
}
pluginAssets.forEach((fileName) => {
const src = join(assetsSource, fileName);
if (existsSync(src)) {
copyFileSync(src, join(assetsTarget, fileName));
console.log(` ✓ 已复制 assets/${fileName}`);
} else {
console.log(` ⚠️ 警告: assets/${fileName} 不存在`);
}
});
console.log(`${vault.name} 部署成功\n`);
successCount++;
} catch (error) {
console.error(`${vault.name} 部署失败`);
console.error(` 错误: ${error.message}\n`);
failCount++;
}
});
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
console.log('📊 部署总结');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
console.log(`✅ 成功: ${successCount} 个 vault`);
console.log(`❌ 失败: ${failCount} 个 vault`);
console.log('\n💡 提示: 在 Obsidian 中重新加载插件以查看更改');
console.log(' - 打开命令面板 (Cmd/Ctrl + P)');
console.log(' - 搜索 "Reload app without saving"');
console.log(' - 或者禁用再启用插件\n');
// 清理 dist 文件夹
try {
rmSync('dist', { recursive: true, force: true });
console.log('🧹 已清理 dist 文件夹\n');
} catch (error) {
console.log('⚠️ 清理 dist 文件夹失败:', error.message, '\n');
}