Optimize building tools (#3824)
* fix: build support dir * fix: add build retry * fix: vite warning ignore
This commit is contained in:
parent
85b4afbe7c
commit
e32666b191
@ -14,16 +14,22 @@ import { buildClient } from './buildClient';
|
|||||||
import { buildCjs } from './buildCjs';
|
import { buildCjs } from './buildCjs';
|
||||||
import { buildPlugin } from './buildPlugin';
|
import { buildPlugin } from './buildPlugin';
|
||||||
import { buildDeclaration } from './buildDeclaration';
|
import { buildDeclaration } from './buildDeclaration';
|
||||||
import { PkgLog, getPkgLog, toUnixPath, getPackageJson, getUserConfig, UserConfig } from './utils';
|
import { PkgLog, getPkgLog, toUnixPath, getPackageJson, getUserConfig, UserConfig, writeToCache, readFromCache } from './utils';
|
||||||
import { getPackages } from './utils/getPackages';
|
import { getPackages } from './utils/getPackages';
|
||||||
import { Package } from '@lerna/package';
|
import { Package } from '@lerna/package';
|
||||||
import { tarPlugin } from './tarPlugin'
|
import { tarPlugin } from './tarPlugin'
|
||||||
|
|
||||||
|
const BUILD_ERROR = 'build-error';
|
||||||
|
|
||||||
export async function build(pkgs: string[]) {
|
export async function build(pkgs: string[]) {
|
||||||
const isDev = process.argv.includes('--development');
|
const isDev = process.argv.includes('--development');
|
||||||
process.env.NODE_ENV = isDev ? 'development' : 'production';
|
process.env.NODE_ENV = isDev ? 'development' : 'production';
|
||||||
|
|
||||||
const packages = getPackages(pkgs);
|
let packages = getPackages(pkgs);
|
||||||
|
const cachePkg = readFromCache(BUILD_ERROR);
|
||||||
|
if (process.argv.includes('--retry') && cachePkg?.pkg) {
|
||||||
|
packages = packages.slice(packages.findIndex((item) => item.name === cachePkg.pkg));
|
||||||
|
}
|
||||||
if (packages.length === 0) {
|
if (packages.length === 0) {
|
||||||
let msg = '';
|
let msg = '';
|
||||||
if (pkgs.length) {
|
if (pkgs.length) {
|
||||||
@ -59,6 +65,7 @@ export async function build(pkgs: string[]) {
|
|||||||
APP_ROOT: path.join(CORE_APP, 'client'),
|
APP_ROOT: path.join(CORE_APP, 'client'),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
writeToCache(BUILD_ERROR, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function buildPackages(
|
export async function buildPackages(
|
||||||
@ -67,6 +74,7 @@ export async function buildPackages(
|
|||||||
doBuildPackage: (cwd: string, userConfig: UserConfig, sourcemap: boolean, log?: PkgLog) => Promise<any>,
|
doBuildPackage: (cwd: string, userConfig: UserConfig, sourcemap: boolean, log?: PkgLog) => Promise<any>,
|
||||||
) {
|
) {
|
||||||
for await (const pkg of packages) {
|
for await (const pkg of packages) {
|
||||||
|
writeToCache(BUILD_ERROR, { pkg: pkg.name })
|
||||||
await buildPackage(pkg, targetDir, doBuildPackage);
|
await buildPackage(pkg, targetDir, doBuildPackage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@ export const EsbuildSupportExts = [
|
|||||||
'.data',
|
'.data',
|
||||||
];
|
];
|
||||||
export const ROOT_PATH = path.join(__dirname, '../../../../');
|
export const ROOT_PATH = path.join(__dirname, '../../../../');
|
||||||
|
export const NODE_MODULES = path.join(ROOT_PATH, 'node_modules');
|
||||||
export const PACKAGES_PATH = path.join(ROOT_PATH, 'packages');
|
export const PACKAGES_PATH = path.join(ROOT_PATH, 'packages');
|
||||||
export const PLUGINS_DIR = ['plugins', 'samples', 'pro-plugins']
|
export const PLUGINS_DIR = ['plugins', 'samples', 'pro-plugins']
|
||||||
.concat((process.env.PLUGINS_DIRS || '').split(','))
|
.concat((process.env.PLUGINS_DIRS || '').split(','))
|
||||||
|
@ -10,6 +10,7 @@ import { toUnixPath } from './utils';
|
|||||||
* 获取构建包的绝对路径,支持项目路径和 npm 两种形式
|
* 获取构建包的绝对路径,支持项目路径和 npm 两种形式
|
||||||
* @example
|
* @example
|
||||||
* yarn build packages/core/client @nocobase/acl => ['/home/xx/packages/core/client', '/home/xx/packages/core/acl']
|
* yarn build packages/core/client @nocobase/acl => ['/home/xx/packages/core/client', '/home/xx/packages/core/acl']
|
||||||
|
* yarn build packages/plugins/* => ['/home/xx/packages/plugins/a', '/home/xx/packages/plugins/b']
|
||||||
* yarn build => all packages
|
* yarn build => all packages
|
||||||
*/
|
*/
|
||||||
function getPackagesPath(pkgs: string[]) {
|
function getPackagesPath(pkgs: string[]) {
|
||||||
@ -24,7 +25,6 @@ function getPackagesPath(pkgs: string[]) {
|
|||||||
return allPackageJson
|
return allPackageJson
|
||||||
.map(toUnixPath).map(item => path.dirname(item));
|
.map(toUnixPath).map(item => path.dirname(item));
|
||||||
}
|
}
|
||||||
|
|
||||||
const allPackageInfo = allPackageJson
|
const allPackageInfo = allPackageJson
|
||||||
.map(packageJsonPath => ({ name: require(packageJsonPath).name, path: path.dirname(toUnixPath(packageJsonPath)) }))
|
.map(packageJsonPath => ({ name: require(packageJsonPath).name, path: path.dirname(toUnixPath(packageJsonPath)) }))
|
||||||
.reduce((acc, cur) => {
|
.reduce((acc, cur) => {
|
||||||
@ -37,7 +37,9 @@ function getPackagesPath(pkgs: string[]) {
|
|||||||
const relativePaths = pkgNames.length ? pkgs.filter(item => !pkgNames.includes(item)) : pkgs;
|
const relativePaths = pkgNames.length ? pkgs.filter(item => !pkgNames.includes(item)) : pkgs;
|
||||||
const pkgPaths = pkgs.map(item => allPackageInfo[item])
|
const pkgPaths = pkgs.map(item => allPackageInfo[item])
|
||||||
const absPaths = allPackagePaths.filter(absPath => relativePaths.some((relativePath) => absPath.endsWith(relativePath)));
|
const absPaths = allPackagePaths.filter(absPath => relativePaths.some((relativePath) => absPath.endsWith(relativePath)));
|
||||||
return [...pkgPaths, ...absPaths];
|
const dirPaths = fg.sync(pkgs, { onlyDirectories: true, absolute: true, cwd: ROOT_PATH });
|
||||||
|
const dirMatchPaths = allPackagePaths.filter(pkgPath => dirPaths.some(dirPath => pkgPath.startsWith(dirPath)));
|
||||||
|
return [...new Set([...pkgPaths, ...absPaths, ...dirMatchPaths])];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getPackages(pkgs: string[]) {
|
export function getPackages(pkgs: string[]) {
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs-extra';
|
|
||||||
import fg from 'fast-glob';
|
import fg from 'fast-glob';
|
||||||
|
import fs from 'fs-extra';
|
||||||
import { Options as TsupConfig } from 'tsup'
|
import { Options as TsupConfig } from 'tsup'
|
||||||
import { InlineConfig as ViteConfig } from 'vite'
|
import { InlineConfig as ViteConfig } from 'vite'
|
||||||
import { register } from 'esbuild-register/dist/node';
|
import { register } from 'esbuild-register/dist/node';
|
||||||
|
import { NODE_MODULES } from '../constant';
|
||||||
|
|
||||||
let previousColor = '';
|
let previousColor = '';
|
||||||
function randomColor() {
|
function randomColor() {
|
||||||
@ -79,3 +80,18 @@ export function getUserConfig(cwd: string) {
|
|||||||
}
|
}
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CACHE_DIR = path.join(NODE_MODULES, '.cache', 'nocobase');
|
||||||
|
export function writeToCache(key: string, data: Record<string, any>) {
|
||||||
|
const cachePath = path.join(CACHE_DIR, `${key}.json`);
|
||||||
|
fs.ensureDirSync(path.dirname(cachePath));
|
||||||
|
fs.writeJsonSync(cachePath, data, { spaces: 2 });
|
||||||
|
}
|
||||||
|
|
||||||
|
export function readFromCache(key: string) {
|
||||||
|
const cachePath = path.join(CACHE_DIR, `${key}.json`);
|
||||||
|
if (fs.existsSync(cachePath)) {
|
||||||
|
return fs.readJsonSync(cachePath);
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
@ -13,6 +13,7 @@ module.exports = (cli) => {
|
|||||||
.argument('[packages...]')
|
.argument('[packages...]')
|
||||||
.option('-v, --version', 'print version')
|
.option('-v, --version', 'print version')
|
||||||
.option('-c, --compile', 'compile the @nocobase/build package')
|
.option('-c, --compile', 'compile the @nocobase/build package')
|
||||||
|
.option('-r, --retry', 'retry the last failed package')
|
||||||
.option('-w, --watch', 'watch compile the @nocobase/build package')
|
.option('-w, --watch', 'watch compile the @nocobase/build package')
|
||||||
.option('-s, --sourcemap', 'generate sourcemap')
|
.option('-s, --sourcemap', 'generate sourcemap')
|
||||||
.option('--no-dts', 'not generate dts')
|
.option('--no-dts', 'not generate dts')
|
||||||
@ -24,12 +25,14 @@ module.exports = (cli) => {
|
|||||||
});
|
});
|
||||||
if (options.watch) return;
|
if (options.watch) return;
|
||||||
}
|
}
|
||||||
|
process.env['VITE_CJS_IGNORE_WARNING'] = 'true';
|
||||||
|
|
||||||
await run('nocobase-build', [
|
await run('nocobase-build', [
|
||||||
...pkgs,
|
...pkgs,
|
||||||
options.version ? '--version' : '',
|
options.version ? '--version' : '',
|
||||||
!options.dts ? '--no-dts' : '',
|
!options.dts ? '--no-dts' : '',
|
||||||
options.sourcemap ? '--sourcemap' : '',
|
options.sourcemap ? '--sourcemap' : '',
|
||||||
|
options.retry ? '--retry' : '',
|
||||||
]);
|
]);
|
||||||
buildIndexHtml(true);
|
buildIndexHtml(true);
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user