hyperchat/packages/electron/scripts/setup-local-deps.js

132 lines
3.9 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
/**
* 将本地包复制到 node_modules模拟 npm install 的效果
* 让 electron-builder 能正常打包本地依赖
*/
function copyRecursiveSync(src, dest) {
const exists = fs.existsSync(src);
const stats = exists && fs.statSync(src);
const isDirectory = exists && stats.isDirectory();
if (isDirectory) {
if (!fs.existsSync(dest)) {
fs.mkdirSync(dest, { recursive: true });
}
fs.readdirSync(src).forEach(childItemName => {
copyRecursiveSync(
path.join(src, childItemName),
path.join(dest, childItemName)
);
});
} else {
fs.copyFileSync(src, dest);
}
}
function createPackageJson(targetDir, packageName, version = "2.0.0") {
const packageJson = {
name: packageName,
version: version,
main: "index.mjs",
type: "module"
};
fs.writeFileSync(
path.join(targetDir, 'package.json'),
JSON.stringify(packageJson, null, 2)
);
}
function getRootVersion() {
try {
const rootPackagePath = path.join(__dirname, '..', '..', '..', 'package.json');
const rootPackage = JSON.parse(fs.readFileSync(rootPackagePath, 'utf8'));
return rootPackage.version;
} catch (error) {
console.warn('⚠️ 无法读取根目录版本,使用默认版本 2.0.0');
return '2.0.0';
}
}
function updateElectronPackageJson(currentVersion) {
const electronPackagePath = path.join(__dirname, '..', 'package.json');
const electronPackage = JSON.parse(fs.readFileSync(electronPackagePath, 'utf8'));
// 更新本地依赖的版本号
if (electronPackage.dependencies) {
if (electronPackage.dependencies['@dadigua/hyperchat-shared']) {
electronPackage.dependencies['@dadigua/hyperchat-shared'] = currentVersion;
}
}
fs.writeFileSync(electronPackagePath, JSON.stringify(electronPackage, null, 2) + '\n');
console.log(`📝 更新 electron package.json 中的依赖版本为: ${currentVersion}`);
}
function setupLocalDependencies() {
console.log('🔧 设置本地依赖到 node_modules...');
const electronRoot = path.join(__dirname, '..');
const nodeModulesDir = path.join(electronRoot, 'node_modules');
const currentVersion = getRootVersion();
console.log(`📋 使用版本号: ${currentVersion}`);
// 更新 electron package.json 中的版本号
updateElectronPackageJson(currentVersion);
// 本地包配置
const localPackages = [
{
name: '@dadigua/hyperchat-shared',
sourcePath: path.join(electronRoot, '..', 'shared', 'dist'),
targetPath: path.join(nodeModulesDir, '@dadigua', 'hyperchat-shared')
}
];
for (const pkg of localPackages) {
console.log(`📦 处理包: ${pkg.name}`);
// 检查源目录是否存在
if (!fs.existsSync(pkg.sourcePath)) {
console.error(`❌ 错误: 源目录不存在 ${pkg.sourcePath}`);
console.error(` 请先构建依赖包`);
process.exit(1);
}
// 创建目标目录
console.log(` 📁 创建目录: ${pkg.targetPath}`);
fs.mkdirSync(pkg.targetPath, { recursive: true });
// 复制文件
console.log(` 📋 复制文件: ${pkg.sourcePath}${pkg.targetPath}`);
copyRecursiveSync(pkg.sourcePath, pkg.targetPath);
// 创建 package.json如果不存在
const packageJsonPath = path.join(pkg.targetPath, 'package.json');
if (!fs.existsSync(packageJsonPath)) {
console.log(` 📝 创建 package.json`);
createPackageJson(pkg.targetPath, pkg.name, currentVersion);
}
console.log(`${pkg.name} 设置完成`);
}
console.log('🎉 所有本地依赖设置完成!');
}
// 执行
try {
setupLocalDependencies();
} catch (error) {
console.error('❌ 设置本地依赖失败:', error.message);
process.exit(1);
}