tachybase_todo/packages/core/build/src/rollup.ts
chenos 6410bc8a75
feat: build, cli, devtools, sdk, docs...
* 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>
2022-05-19 00:40:55 +08:00

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 👀`));
}
}