feat: Add watching functionality to plugin detection

Signed-off-by: Jack Palmer <jackpalmer@spotify.com>
This commit is contained in:
Jack Palmer
2023-07-25 12:09:10 +01:00
committed by Patrik Oldsberg
parent fe0ef349f1
commit 9fa2fae3c2
2 changed files with 24 additions and 4 deletions
+19 -2
View File
@@ -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(',');
+5 -2
View File
@@ -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);