From 02e418e83f515ed7272227b2823a3aff45960431 Mon Sep 17 00:00:00 2001 From: chenos Date: Tue, 3 Dec 2024 23:13:09 +0800 Subject: [PATCH] perf: optimize the pkg command (#5785) --- .env.example | 7 +++++ packages/core/cli/src/commands/pkg.js | 43 ++++++++++++++++++++------- 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/.env.example b/.env.example index 4e6c72652d..3701158c1d 100644 --- a/.env.example +++ b/.env.example @@ -74,3 +74,10 @@ INIT_ROOT_USERNAME=nocobase ################# ENCRYPTION FIELD ################# ENCRYPTION_FIELD_KEY= + +################# NOCOBASE PACKAGE AUTH ################# + +# service platform username +NOCOBASE_PKG_USERNAME= +# service platform password +NOCOBASE_PKG_PASSWORD= diff --git a/packages/core/cli/src/commands/pkg.js b/packages/core/cli/src/commands/pkg.js index 1ca981cffa..8ef7fa2b21 100644 --- a/packages/core/cli/src/commands/pkg.js +++ b/packages/core/cli/src/commands/pkg.js @@ -58,14 +58,16 @@ class Package { return [version, this.data.versions[version].dist.tarball]; } - if (version.includes('beta')) { - version = version.split('beta')[0] + 'beta'; - } else if (version.includes('alpha')) { - const prefix = (version = version.split('alpha')[0]); - version = Object.keys(this.data.versions) - .filter((ver) => ver.startsWith(`${prefix}alpha`)) - .sort() - .pop(); + const keys = version.split('.'); + const length = keys.length; + + if (version.includes('rc')) { + version = version.split('-').shift(); + } + + if (length === 5) { + keys.pop(); + version = keys.join('.'); } if (version === 'latest') { @@ -93,11 +95,25 @@ class Package { return false; } + async isDownloaded(version) { + const packageFile = path.resolve(process.env.PLUGIN_STORAGE_PATH, this.packageName, 'package.json'); + if (await fs.exists(packageFile)) { + const json = await fs.readJson(packageFile); + if (json.version === version) { + return true; + } + } + return false; + } + async download(options = {}) { if (await this.isDevPackage()) { console.log(chalk.yellowBright(`Skipped: ${this.packageName} is dev package`)); return; } + if (await this.isDownloaded(options.version)) { + return; + } await this.getInfo(); if (!this.data) { console.log(chalk.redBright(`Download failed: ${this.packageName} package does not exist`)); @@ -105,6 +121,9 @@ class Package { } try { const [version, url] = this.getTarball(options.version); + if (await this.isDownloaded(version)) { + return; + } const response = await axios({ url, responseType: 'stream', @@ -200,8 +219,12 @@ module.exports = (cli) => { .command('download-pro') .option('-V, --version [version]') .action(async () => { - const { NOCOBASE_PKG_URL, NOCOBASE_PKG_USERNAME, NOCOBASE_PKG_PASSWORD } = process.env; - if (!(NOCOBASE_PKG_URL && NOCOBASE_PKG_USERNAME && NOCOBASE_PKG_PASSWORD)) { + const { + NOCOBASE_PKG_URL = 'https://pkg.nocobase.com/', + NOCOBASE_PKG_USERNAME, + NOCOBASE_PKG_PASSWORD, + } = process.env; + if (!(NOCOBASE_PKG_USERNAME && NOCOBASE_PKG_PASSWORD)) { return; } const credentials = { username: NOCOBASE_PKG_USERNAME, password: NOCOBASE_PKG_PASSWORD };