feat: Add watching functionality to plugin detection
Signed-off-by: Jack Palmer <jackpalmer@spotify.com>
This commit is contained in:
committed by
Patrik Oldsberg
parent
fe0ef349f1
commit
9fa2fae3c2
@@ -18,13 +18,30 @@ import { BackstagePackageJson } from '@backstage/cli-node';
|
||||
import { Config } from '@backstage/config';
|
||||
import fs from 'fs-extra';
|
||||
import path from 'path';
|
||||
import chokidar from 'chokidar';
|
||||
|
||||
import { paths as cliPaths } from '../../lib/paths';
|
||||
import { BundlingPathsOptions, resolveBundlingPaths } from './paths';
|
||||
|
||||
type Options = { config: Config } & BundlingPathsOptions;
|
||||
type Options = { config: Config; watch: () => void } & BundlingPathsOptions;
|
||||
|
||||
export async function writeDetectedPluginsModule(options: Options) {
|
||||
export async function buildDetectedPlugins(options: Options) {
|
||||
const { entry, targetDir } = options;
|
||||
const { targetPackageJson } = resolveBundlingPaths({ entry, targetDir });
|
||||
|
||||
if (!!options.watch) {
|
||||
const watcher = chokidar.watch(targetPackageJson);
|
||||
|
||||
watcher.on('change', async () => {
|
||||
await writeDetectedPluginsModule(options);
|
||||
options.watch();
|
||||
});
|
||||
}
|
||||
|
||||
await writeDetectedPluginsModule(options);
|
||||
}
|
||||
|
||||
async function writeDetectedPluginsModule(options: Options) {
|
||||
const requirePackageScript = (await detectPlugins(options))
|
||||
?.map(pkg => `{name: '${pkg}', module: require('${pkg}')}`)
|
||||
.join(',');
|
||||
|
||||
@@ -31,7 +31,7 @@ import { paths as libPaths } from '../../lib/paths';
|
||||
import { loadCliConfig } from '../config';
|
||||
import { Lockfile } from '../versioning';
|
||||
import { createConfig, resolveBaseUrl } from './config';
|
||||
import { writeDetectedPluginsModule } from './discover';
|
||||
import { buildDetectedPlugins } from './discover';
|
||||
import { resolveBundlingPaths } from './paths';
|
||||
import { ServeOptions } from './types';
|
||||
|
||||
@@ -131,10 +131,13 @@ export async function serveBundle(options: ServeOptions) {
|
||||
},
|
||||
});
|
||||
|
||||
await writeDetectedPluginsModule({
|
||||
await buildDetectedPlugins({
|
||||
config: fullConfig,
|
||||
entry: options.entry,
|
||||
targetDir: options.targetDir,
|
||||
watch() {
|
||||
server?.invalidate();
|
||||
},
|
||||
});
|
||||
|
||||
const compiler = webpack(config);
|
||||
|
||||
Reference in New Issue
Block a user