6410bc8a75
* feat: nocobase build * chore: update build scripts * chore: update build scripts * chore(versions): 😊 publish v0.7.0-alpha.33 * chore: independent version * chore: nocobase build * chore(versions): 😊 publish v0.7.0-alpha.34 * feat: nocobase-cli * feat: nocobase-cli * chore: update dependencies * feat: improve code * refactor: create-nocobase-app * chore(versions): 😊 publish v0.7.0-alpha.35 * feat: @nocobase/devtools * chore(versions): 😊 publish v0.7.0-alpha.36 * chore: update dependencies * chore(versions): 😊 publish v0.7.0-alpha.37 * feat: improve code * chore(versions): 😊 publish v0.7.0-alpha.38 * feat: improve code * chore(versions): 😊 publish v0.7.0-alpha.39 * feat: update deps * chore(versions): 😊 publish v0.7.0-alpha.40 * chore: update devDependencies * chore(versions): 😊 publish v0.7.0-alpha.41 * fix: postinstall * chore(versions): 😊 publish v0.7.0-alpha.42 * chore: improve code * chore(versions): 😊 publish v0.7.0-alpha.43 * chore: execa * chore(versions): 😊 publish v0.7.0-alpha.44 * chore(cli): allow unknown option * chore(versions): 😊 publish v0.7.0-alpha.45 * fix: default envs * chore(versions): 😊 publish v0.7.0-alpha.45 * fix: package argument for build command * chore(versions): 😊 publish v0.7.0-alpha.46 * fix: improve code * chore(versions): 😊 publish v0.7.0-alpha.48 * feat: clean & doc * chore(versions): 😊 publish v0.7.0-alpha.49 * feat: compilation tips * feat: upgrade command * chore(versions): 😊 publish v0.7.0-alpha.50 * fix: unexpected token ] in JSON * chore(versions): 😊 publish v0.7.0-alpha.51 * fix: upgrade command * chore(versions): 😊 publish v0.7.0-alpha.52 * fix: remove export action from available action * fix: db sync after upgrade * chore(versions): 😊 publish v0.7.0-alpha.53 * feat: upgrade log * chore(versions): 😊 publish v0.7.0-alpha.54 * docs: updates * feat: updates * docs(cli): update usage description * feat: updates * docs: updates * docs: updates * docs: toc * feat: sdk * docs: updates * docs: updates * docs: updates * Update index.md * docs: updates * Update release-notes.md * Update roadmap.md * Update index.md * Update contributing.md * Update contributing.md * Update index.md * Update index.md * Update nocobase-cli.md * Update nocobase-cli.md * fix: user plugin initialization data * Update env.md * Update env.md * Update directory-structure.md * Update index.md * Update action-api.md * Update filter-operators.md * docs: update thanks.md * Update index.md * Update javascript-sdk.md * Update rest-api.md * Update installation.md * Update installation.md * Update upgrading.md * Update upgrading.md * Update upgrading.md * Update installation.md * Update installation.md * Create release-notes.md * Update release-notes.md * feat: updates * feat: update docs * feat: update release-notes.md * feat: switch language * feat: updates * Add files via upload * Add files via upload * Update important-features.md * Update thanks.md * feat: nocobase postinstall * Update index.md * Create why-different.md * Update why-different.md * Create who-is-for.md * Rename who-is-for.md to who.md * feat: update docs * Rename why-different.md to why.md * Update why.md * Update menus.ts * Update why-nocobase.md * Create who.md * Create why.md * feat: updates * chore(versions): 😊 publish v0.7.0-alpha.55 * feat: tips * Update who.md * Update who.md * feat: update docs * feat: update doc menus * fix: plugin client dist * docs: update contributing.md * docs: update readme.md * docs: update readme.md * docs: update readme.md * Update functional-zoning.md * fix: br Co-authored-by: Zhou <zhou.working@gmail.com>
78 lines
2.2 KiB
TypeScript
Executable File
78 lines
2.2 KiB
TypeScript
Executable File
import { ModuleFormat, rollup, watch } from 'rollup';
|
|
import signale from 'signale';
|
|
import chalk from 'chalk';
|
|
import getRollupConfig from './getRollupConfig';
|
|
import { Dispose, IBundleOptions } from './types';
|
|
import normalizeBundleOpts from './normalizeBundleOpts';
|
|
|
|
interface IRollupOpts {
|
|
cwd: string;
|
|
rootPath?: string;
|
|
entry: string | string[];
|
|
type: ModuleFormat;
|
|
log: (string) => void;
|
|
bundleOpts: IBundleOptions;
|
|
watch?: boolean;
|
|
dispose?: Dispose[];
|
|
importLibToEs?: boolean;
|
|
}
|
|
|
|
async function build(entry: string, opts: IRollupOpts) {
|
|
const { cwd, rootPath, type, log, bundleOpts, importLibToEs, dispose } = opts;
|
|
const rollupConfigs = getRollupConfig({
|
|
cwd,
|
|
rootPath:rootPath || cwd,
|
|
type,
|
|
entry,
|
|
importLibToEs,
|
|
bundleOpts: normalizeBundleOpts(entry, bundleOpts),
|
|
});
|
|
|
|
for (const rollupConfig of rollupConfigs) {
|
|
if (opts.watch) {
|
|
const watcher = watch([
|
|
{
|
|
...rollupConfig,
|
|
watch: {},
|
|
},
|
|
]);
|
|
await (new Promise<void>((resolve) => {
|
|
watcher.on('event', (event) => {
|
|
// 每次构建完成都会触发 BUNDLE_END 事件
|
|
// 当第一次构建完成或出错就 resolve
|
|
if (event.code === 'ERROR') {
|
|
signale.error(event.error);
|
|
resolve();
|
|
} else if (event.code === 'BUNDLE_END') {
|
|
log(`${chalk.green(`Build ${type} success`)} ${chalk.gray(`entry: ${entry}`)}`);
|
|
resolve();
|
|
}
|
|
});
|
|
}));
|
|
process.once('SIGINT', () => {
|
|
watcher.close();
|
|
});
|
|
dispose?.push(() => watcher.close());
|
|
} else {
|
|
const { output, ...input } = rollupConfig;
|
|
const bundle = await rollup(input); // eslint-disable-line
|
|
await bundle.write(output); // eslint-disable-line
|
|
log(`${chalk.green(`Build ${type} success`)} ${chalk.gray(`entry: ${entry}`)}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
export default async function(opts: IRollupOpts) {
|
|
if (Array.isArray(opts.entry)) {
|
|
const { entry: entries } = opts;
|
|
for (const entry of entries) {
|
|
await build(entry, opts);
|
|
}
|
|
} else {
|
|
await build(opts.entry, opts);
|
|
}
|
|
if (opts.watch) {
|
|
opts.log(chalk.magentaBright(`Rebuild ${opts.type} since file changed 👀`));
|
|
}
|
|
}
|