diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0a5b637..d815187 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -81,9 +81,6 @@ importers: '@e2e/workspace-dev-components': specifier: workspace:* version: link:../components - '@e2e/workspace-dev-utils2': - specifier: workspace:* - version: link:../utils2 devDependencies: rsbuild-plugin-workspace-dev: specifier: workspace:* diff --git a/src/logger.ts b/src/logger.ts index a9eeea7..b0f0867 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -37,6 +37,10 @@ export class Logger { console[logMap[type]](this[type]); } + emitLogOnce(type: 'stdout' | 'stderr', log: string) { + console[logMap[type]](log); + } + reset(type: 'stdout' | 'stderr') { this[type] = ''; } diff --git a/src/workspace-dev.ts b/src/workspace-dev.ts index da5985b..aac6c36 100644 --- a/src/workspace-dev.ts +++ b/src/workspace-dev.ts @@ -37,6 +37,7 @@ export class WorkspaceDevRunner { private graph: Graph; private visited: Record; private visiting: Record; + private matched: Record; private metaData!: Package['packageJson']; constructor(options: WorkspaceDevRunnerOptions) { @@ -46,6 +47,7 @@ export class WorkspaceDevRunner { this.packages = []; this.visited = {}; this.visiting = {}; + this.matched = {}; this.graph = new Graph({ directed: true }); } @@ -80,6 +82,7 @@ export class WorkspaceDevRunner { this.graph.setNode(name, node); this.visited[name] = false; this.visiting[name] = false; + this.matched[name] = false; const packageName = name; const deps = { @@ -185,6 +188,10 @@ export class WorkspaceDevRunner { }); child.stdout.on('data', async (data) => { const stdout = data.toString(); + if (this.matched[node]) { + logger.emitLogOnce('stdout', stdout); + return; + } logger.appendLog('stdout', stdout); const match = config?.match; const matchResult = match @@ -193,6 +200,7 @@ export class WorkspaceDevRunner { if (matchResult) { logger.flushStdout(); + this.matched[node] = true; this.visited[node] = true; this.visiting[node] = false; await this.start(); @@ -202,9 +210,7 @@ export class WorkspaceDevRunner { child.stderr.on('data', (data) => { const stderr = data.toString(); - logger.appendLog('stderr', stderr); - logger.emitLog('stderr'); - logger.reset('stderr'); + logger.emitLogOnce('stderr', stderr); }); child.on('close', () => {}); diff --git a/test/app/package.json b/test/app/package.json index c230b0b..4c68a8e 100644 --- a/test/app/package.json +++ b/test/app/package.json @@ -7,8 +7,7 @@ "dev": "rsbuild dev" }, "dependencies": { - "@e2e/workspace-dev-components": "workspace:*", - "@e2e/workspace-dev-utils2": "workspace:*" + "@e2e/workspace-dev-components": "workspace:*" }, "devDependencies": { "rsbuild-plugin-workspace-dev": "workspace:*"