feat: hmr logic for the backend

This commit is contained in:
Ivan Shmidt
2020-06-11 02:51:06 +02:00
parent 0331d33a37
commit a1a60ad9d1
16 changed files with 131 additions and 28 deletions
+17 -6
View File
@@ -22,7 +22,11 @@
* Happy hacking!
*/
import { createServiceBuilder, getRootLogger } from '@backstage/backend-common';
import {
createServiceBuilder,
getRootLogger,
useHotMemoize,
} from '@backstage/backend-common';
import knex from 'knex';
import auth from './plugins/auth';
import catalog from './plugins/catalog';
@@ -45,19 +49,24 @@ function createEnv(plugin: string): PluginEnvironment {
}
async function main() {
const service = createServiceBuilder()
const catalogEnv = useHotMemoize(module, () => createEnv('catalog'));
const scaffolderEnv = useHotMemoize(module, () => createEnv('scaffolder'));
const authEnv = useHotMemoize(module, () => createEnv('auth'));
const identityEnv = useHotMemoize(module, () => createEnv('identity'));
const service = createServiceBuilder(module)
.enableCors({
origin: 'http://localhost:3000',
credentials: true,
})
.addRouter('/catalog', await catalog(createEnv('catalog')))
.addRouter('/scaffolder', await scaffolder(createEnv('scaffolder')))
.addRouter('/catalog', await catalog(catalogEnv))
.addRouter('/scaffolder', await scaffolder(scaffolderEnv))
.addRouter(
'/sentry',
await sentry(getRootLogger().child({ type: 'plugin', plugin: 'sentry' })),
)
.addRouter('/auth', await auth(createEnv('auth')))
.addRouter('/identity', await identity(createEnv('identity')));
.addRouter('/auth', await auth(authEnv))
.addRouter('/identity', await identity(identityEnv));
await service.start().catch(err => {
console.log(err);
@@ -66,3 +75,5 @@ async function main() {
}
main();
module.hot?.accept();
+4 -1
View File
@@ -24,6 +24,7 @@ import {
runPeriodically,
} from '@backstage/plugin-catalog-backend';
import { PluginEnvironment } from '../types';
import { useHotEffect } from '@backstage/backend-common';
export default async function createPlugin({
logger,
@@ -41,7 +42,9 @@ export default async function createPlugin({
logger,
);
runPeriodically(() => higherOrderOperation.refreshAllLocations(), 10000);
useHotEffect(module, () =>
runPeriodically(() => higherOrderOperation.refreshAllLocations(), 10000),
);
return await createRouter({
entitiesCatalog,
+1 -1
View File
@@ -10,6 +10,6 @@
"module": "commonjs",
"esModuleInterop": true,
"lib": ["es2019", "dom"],
"types": ["node", "jest"]
"types": ["node", "jest", "webpack-env"]
}
}