使用Lerna 和 monorepo管理项目结构

This commit is contained in:
YHH
2025-08-07 13:29:12 +08:00
parent 4479f0fab0
commit ea8523be35
135 changed files with 7058 additions and 372 deletions

View File

@@ -0,0 +1,108 @@
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');
console.log('发布前检查...');
async function main() {
try {
// 1. 检查所有包的package.json是否存在
console.log('\n检查包结构...');
const packagesDir = path.join(__dirname, '..', 'packages');
const packages = fs.readdirSync(packagesDir);
for (const pkg of packages) {
const pkgPath = path.join(packagesDir, pkg);
const packageJsonPath = path.join(pkgPath, 'package.json');
if (!fs.existsSync(packageJsonPath)) {
throw new Error(`${pkg} 缺少 package.json`);
}
console.log(` [OK] ${pkg}: package.json 存在`);
}
// 2. 检查构建输出是否存在
console.log('\n检查构建输出...');
for (const pkg of packages) {
const pkgPath = path.join(packagesDir, pkg);
const binPath = path.join(pkgPath, 'bin');
if (!fs.existsSync(binPath)) {
throw new Error(`${pkg} 缺少构建输出 (bin目录不存在)`);
}
const indexPath = path.join(binPath, 'index.js');
if (!fs.existsSync(indexPath)) {
throw new Error(`${pkg} 缺少入口文件 (bin/index.js 不存在)`);
}
console.log(` [OK] ${pkg}: 构建输出存在`);
}
// 3. 检查版本依赖一致性
console.log('\n检查依赖版本...');
const corePackageJson = JSON.parse(fs.readFileSync(
path.join(packagesDir, 'core', 'package.json'),
'utf8'
));
const networkPackageJson = JSON.parse(fs.readFileSync(
path.join(packagesDir, 'network', 'package.json'),
'utf8'
));
const coreVersion = corePackageJson.version;
const networkPeerDep = networkPackageJson.peerDependencies['@esengine/ecs-framework'];
console.log(` Core版本: ${coreVersion}`);
console.log(` Network依赖: ${networkPeerDep}`);
// 检查network的peerDependencies是否兼容core的当前版本
const semver = require('semver');
if (!semver.satisfies(coreVersion, networkPeerDep)) {
console.warn(` [WARN] 版本可能不兼容,但继续检查...`);
} else {
console.log(` [OK] 版本兼容性检查通过`);
}
// 4. 检查Git状态
console.log('\n检查Git状态...');
try {
const gitStatus = execSync('git status --porcelain', { encoding: 'utf8' });
if (gitStatus.trim()) {
console.warn(' [WARN] 工作目录有未提交的更改:');
console.warn(gitStatus);
} else {
console.log(' [OK] 工作目录干净');
}
} catch (error) {
console.warn(' [WARN] 无法检查Git状态');
}
// 5. 运行测试
console.log('\n运行测试...');
try {
execSync('npm test', { stdio: 'inherit', cwd: path.join(packagesDir, 'core') });
console.log(' [OK] Core包测试通过');
} catch (error) {
console.warn(' [WARN] Core包测试失败请检查');
}
try {
execSync('npm test', { stdio: 'inherit', cwd: path.join(packagesDir, 'network') });
console.log(' [OK] Network包测试通过');
} catch (error) {
console.warn(' [WARN] Network包测试失败请检查');
}
console.log('\n发布前检查完成');
console.log('\n可以运行以下命令进行发布:');
console.log('npm run publish:all');
} catch (error) {
console.error('\n发布前检查失败:', error.message);
process.exit(1);
}
}
main().catch(console.error);