116 lines
3.9 KiB
JavaScript
116 lines
3.9 KiB
JavaScript
|
|
import fs from 'fs';
|
||
|
|
import path from 'path';
|
||
|
|
import { fileURLToPath } from 'url';
|
||
|
|
|
||
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||
|
|
const parentDir = path.join(__dirname, '../..');
|
||
|
|
|
||
|
|
// 默认版本,如果没扫到就用这个
|
||
|
|
const versions = {
|
||
|
|
'state': '1.0.11',
|
||
|
|
'bootstrap': '1.0.0',
|
||
|
|
'base': '1.0.7',
|
||
|
|
'datatable': '1.0.6',
|
||
|
|
'kanban': '1.0.0',
|
||
|
|
'mindmap': '1.0.0',
|
||
|
|
'chart': '1.0.0',
|
||
|
|
'editor': '1.0.0'
|
||
|
|
};
|
||
|
|
|
||
|
|
// 1. 扫描同级目录获取最新版本号
|
||
|
|
try {
|
||
|
|
const dirs = fs.readdirSync(parentDir);
|
||
|
|
dirs.forEach(dir => {
|
||
|
|
const pkgPath = path.join(parentDir, dir, 'package.json');
|
||
|
|
if (fs.existsSync(pkgPath)) {
|
||
|
|
try {
|
||
|
|
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
||
|
|
if (pkg.name && pkg.name.startsWith('@apigo.cc/')) {
|
||
|
|
const key = pkg.name.replace('@apigo.cc/', '').toLowerCase();
|
||
|
|
if (pkg.version) {
|
||
|
|
versions[key] = pkg.version;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
} catch (e) {
|
||
|
|
console.warn(`Failed to parse ${pkgPath}:`, e.message);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
} catch (err) {
|
||
|
|
console.error('Failed to read parent directory:', err.message);
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log('Gathered versions:', versions);
|
||
|
|
|
||
|
|
// 2. 获取 loader 自己的版本号
|
||
|
|
const loaderPkgPath = path.join(__dirname, '../package.json');
|
||
|
|
let loaderVersion = '1.0.0';
|
||
|
|
try {
|
||
|
|
const loaderPkg = JSON.parse(fs.readFileSync(loaderPkgPath, 'utf8'));
|
||
|
|
loaderVersion = loaderPkg.version || '1.0.0';
|
||
|
|
} catch (e) {
|
||
|
|
console.warn('Failed to read loader package.json:', e.message);
|
||
|
|
}
|
||
|
|
|
||
|
|
// 3. 更新 loader/src/index.js
|
||
|
|
const indexPath = path.join(__dirname, '../src/index.js');
|
||
|
|
if (fs.existsSync(indexPath)) {
|
||
|
|
let indexContent = fs.readFileSync(indexPath, 'utf8');
|
||
|
|
const versionsString = Object.entries(versions)
|
||
|
|
.map(([k, v]) => ` '${k}': '${v}'`)
|
||
|
|
.join(',\n');
|
||
|
|
|
||
|
|
const newDefaultVersions = `const DEFAULT_VERSIONS = {\n${versionsString}\n};`;
|
||
|
|
indexContent = indexContent.replace(/const DEFAULT_VERSIONS = \{[\s\S]*?\};/, newDefaultVersions);
|
||
|
|
|
||
|
|
fs.writeFileSync(indexPath, indexContent, 'utf8');
|
||
|
|
console.log('Updated loader/src/index.js DEFAULT_VERSIONS.');
|
||
|
|
}
|
||
|
|
|
||
|
|
// 4. 更新 loader/README.md
|
||
|
|
const readmePath = path.join(__dirname, '../README.md');
|
||
|
|
if (fs.existsSync(readmePath)) {
|
||
|
|
let readmeContent = fs.readFileSync(readmePath, 'utf8');
|
||
|
|
|
||
|
|
// 替换 Loader.load('state', 'bootstrap', 'base') 里的版本号
|
||
|
|
// 支持形如 Loader.load('state:x.y.z', 'bootstrap:x.y.z', 'base:x.y.z')
|
||
|
|
// 或者最原始的 Loader.load('state', 'bootstrap', 'base')
|
||
|
|
readmeContent = readmeContent.replace(
|
||
|
|
/Loader\.load\(([^)]*)\)/g,
|
||
|
|
(match, p1) => {
|
||
|
|
// 提取被单引号/双引号包裹的各个 package 项
|
||
|
|
const items = p1.split(',').map(item => item.trim().replace(/['"]/g, ''));
|
||
|
|
const newItems = items.map(item => {
|
||
|
|
const [name] = item.split(':');
|
||
|
|
const key = name.toLowerCase();
|
||
|
|
if (versions[key]) {
|
||
|
|
return `'${key}:${versions[key]}'`;
|
||
|
|
}
|
||
|
|
return `'${item}'`;
|
||
|
|
});
|
||
|
|
return `Loader.load(${newItems.join(', ')})`;
|
||
|
|
}
|
||
|
|
);
|
||
|
|
|
||
|
|
// 替换 cdn 链接里的 loader 版本
|
||
|
|
// 如 <script src="https://cdn.jsdelivr.net/npm/@apigo.cc/loader@1.0.0/dist/loader.min.js"></script>
|
||
|
|
readmeContent = readmeContent.replace(
|
||
|
|
/(\/\/cdn\.jsdelivr\.net\/npm\/@apigo\.cc\/loader@)[0-9.]+(\/dist\/loader\.min\.js)/g,
|
||
|
|
`$1${loaderVersion}$2`
|
||
|
|
);
|
||
|
|
|
||
|
|
// 替换 manual import 里的依赖版本,如:
|
||
|
|
// "@apigo.cc/state": "https://cdn.jsdelivr.net/npm/@apigo.cc/state@1.0.11/dist/state.min.js",
|
||
|
|
readmeContent = readmeContent.replace(
|
||
|
|
/(\/@apigo\.cc\/([a-zA-Z0-9_-]+)@)[0-9.]+(\/dist\/)/g,
|
||
|
|
(match, prefix, name, suffix) => {
|
||
|
|
const key = name.toLowerCase();
|
||
|
|
const ver = key === 'loader' ? loaderVersion : (versions[key] || 'latest');
|
||
|
|
return `${prefix}${ver}${suffix}`;
|
||
|
|
}
|
||
|
|
);
|
||
|
|
|
||
|
|
fs.writeFileSync(readmePath, readmeContent, 'utf8');
|
||
|
|
console.log('Updated loader/README.md versions.');
|
||
|
|
}
|