fix: legacy no emit worker (#9500)

This commit is contained in:
yoho 2022-08-10 18:14:44 +08:00 committed by GitHub
parent 6d952252c7
commit 9d0b18b1cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 42 additions and 12 deletions

View File

@ -351,14 +351,19 @@ export function webWorkerPlugin(config: ResolvedConfig): Plugin {
)
}
}
if (!isWorker) {
const workerMap = workerCache.get(config)!
workerMap.assets.forEach((asset) => {
this.emitFile(asset)
workerMap.assets.delete(asset.fileName!)
})
}
return result()
},
generateBundle(opts) {
// @ts-ignore asset emits are skipped in legacy bundle
if (opts.__vite_skip_asset_emit__ || isWorker) {
return
}
const workerMap = workerCache.get(config)!
workerMap.assets.forEach((asset) => {
this.emitFile(asset)
workerMap.assets.delete(asset.fileName!)
})
}
}
}

View File

@ -8,22 +8,32 @@ import {
untilUpdated
} from '~utils'
test('should load the worker', async () => {
await untilUpdated(() => page.textContent('.worker-message'), 'module', true)
})
test('should work', async () => {
expect(await page.textContent('#app')).toMatch('Hello')
await untilUpdated(() => page.textContent('#app'), 'Hello', true)
})
test('import.meta.env.LEGACY', async () => {
expect(await page.textContent('#env')).toMatch(isBuild ? 'true' : 'false')
await untilUpdated(
() => page.textContent('#env'),
isBuild ? 'true' : 'false',
true
)
})
// https://github.com/vitejs/vite/issues/3400
test('transpiles down iterators correctly', async () => {
expect(await page.textContent('#iterators')).toMatch('hello')
await untilUpdated(() => page.textContent('#iterators'), 'hello', true)
})
test('wraps with iife', async () => {
expect(await page.textContent('#babel-helpers')).toMatch(
'exposed babel helpers: false'
await untilUpdated(
() => page.textContent('#babel-helpers'),
'exposed babel helpers: false',
true
)
})

View File

@ -6,5 +6,7 @@
<div id="assets"></div>
<button id="dynamic-css-button">dynamic css</button>
<div id="dynamic-css"></div>
<p>## worker message:</p>
<div class="worker-message"></div>
<div id="asset-path"></div>
<script type="module" src="./main.js"></script>

View File

@ -1,5 +1,6 @@
import './style.css'
import viteSvgPath from './vite.svg'
import MyWorker from './worker?worker'
async function run() {
const { fn } = await import('./async.js')
@ -56,3 +57,9 @@ text('#asset-path', viteSvgPath)
function text(el, text) {
document.querySelector(el).textContent = text
}
const worker = new MyWorker()
worker.postMessage('ping')
worker.addEventListener('message', (ev) => {
text('.worker-message', JSON.stringify(ev.data))
})

View File

@ -0,0 +1 @@
export const module = 'module'

View File

@ -0,0 +1,5 @@
import { module } from './module'
self.onmessage = () => {
self.postMessage(module)
}