Files
esengine/scripts/pre-publish-check.cjs
yhh ad96edfad0 fix: 恢复 @esengine/ecs-framework 包名
上一个提交错误地将 npm 包名也改了,这里恢复正确的包名。
只更新 GitHub 仓库 URL,不改变 npm 包名。
2025-12-08 21:26:35 +08:00

108 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.
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);