From 1e055489595476822f0183248f1029bd2d165785 Mon Sep 17 00:00:00 2001 From: patak Date: Fri, 10 Jun 2022 09:39:21 +0200 Subject: [PATCH] fix: deps optimizer idle logic for workers (fix #8479) (#8511) --- packages/vite/src/node/optimizer/optimizer.ts | 14 ++++++++++---- playground/worker/dep-to-optimize/index.js | 1 + playground/worker/dep-to-optimize/package.json | 7 +++++++ playground/worker/my-worker.ts | 3 ++- playground/worker/package.json | 3 +++ pnpm-lock.yaml | 12 ++++++++++++ 6 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 playground/worker/dep-to-optimize/index.js create mode 100644 playground/worker/dep-to-optimize/package.json diff --git a/packages/vite/src/node/optimizer/optimizer.ts b/packages/vite/src/node/optimizer/optimizer.ts index a7c5391de79b5f..a75eb9090aa109 100644 --- a/packages/vite/src/node/optimizer/optimizer.ts +++ b/packages/vite/src/node/optimizer/optimizer.ts @@ -521,8 +521,12 @@ export async function initDepsOptimizer( function registerWorkersSource(id: string): void { workersSources.add(id) + // Avoid waiting for this id, as it may be blocked by the rollup + // bundling process of the worker that also depends on the optimizer + registeredIds = registeredIds.filter((registered) => registered.id !== id) if (waitingOn === id) { waitingOn = undefined + runOptimizerWhenIdle() } } @@ -545,10 +549,12 @@ export async function initDepsOptimizer( waitingOn = next.id const afterLoad = () => { waitingOn = undefined - if (registeredIds.length > 0) { - runOptimizerWhenIdle() - } else if (!workersSources.has(next.id)) { - getDepsOptimizer(config)?.run() + if (!workersSources.has(next.id)) { + if (registeredIds.length > 0) { + runOptimizerWhenIdle() + } else { + getDepsOptimizer(config)?.run() + } } } next diff --git a/playground/worker/dep-to-optimize/index.js b/playground/worker/dep-to-optimize/index.js new file mode 100644 index 00000000000000..a9e424d7c3a0bf --- /dev/null +++ b/playground/worker/dep-to-optimize/index.js @@ -0,0 +1 @@ +export const msg = 'dep-to-optimize' diff --git a/playground/worker/dep-to-optimize/package.json b/playground/worker/dep-to-optimize/package.json new file mode 100644 index 00000000000000..79ef04de908d58 --- /dev/null +++ b/playground/worker/dep-to-optimize/package.json @@ -0,0 +1,7 @@ +{ + "name": "dep-to-optimize", + "private": true, + "version": "1.0.0", + "type": "module", + "main": "index.js" +} diff --git a/playground/worker/my-worker.ts b/playground/worker/my-worker.ts index cfaaeeb4b788d3..5d45a833497fd7 100644 --- a/playground/worker/my-worker.ts +++ b/playground/worker/my-worker.ts @@ -1,9 +1,10 @@ import { mode, msg } from './modules/workerImport' import { bundleWithPlugin } from './modules/test-plugin' +import { msg as msgFromDep } from 'dep-to-optimize' self.onmessage = (e) => { if (e.data === 'ping') { - self.postMessage({ msg, mode, bundleWithPlugin }) + self.postMessage({ msg, mode, bundleWithPlugin, msgFromDep }) } } diff --git a/playground/worker/package.json b/playground/worker/package.json index d66a96e84d59f2..a4ee96e1620538 100644 --- a/playground/worker/package.json +++ b/playground/worker/package.json @@ -23,6 +23,9 @@ "preview:relative-base": "cross-env WORKER_MODE=inline vite --config ./vite.config-relative-base.js preview", "debug": "node --inspect-brk ../../packages/vite/bin/vite" }, + "dependencies": { + "dep-to-optimize": "file:./dep-to-optimize" + }, "devDependencies": { "@vitejs/plugin-vue-jsx": "workspace:*" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f57f9baab70ffa..0e072489df63e2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1045,9 +1045,15 @@ importers: playground/worker: specifiers: '@vitejs/plugin-vue-jsx': workspace:* + dep-to-optimize: file:./dep-to-optimize + dependencies: + dep-to-optimize: file:playground/worker/dep-to-optimize devDependencies: '@vitejs/plugin-vue-jsx': link:../../packages/plugin-vue-jsx + playground/worker/dep-to-optimize: + specifiers: {} + packages: /@algolia/autocomplete-core/1.5.2: @@ -9017,3 +9023,9 @@ packages: name: example-external-component version: 0.0.0 dev: false + + file:playground/worker/dep-to-optimize: + resolution: {directory: playground/worker/dep-to-optimize, type: directory} + name: dep-to-optimize + version: 1.0.0 + dev: false