Skip to content

Commit

Permalink
fix(legacy): fix broken build when renderModernChunks=false & polyfil…
Browse files Browse the repository at this point in the history
…ls=false (fix #14324) (#14346)
  • Loading branch information
k-yle authored Sep 26, 2023
1 parent ca34c64 commit 27e5b11
Show file tree
Hide file tree
Showing 10 changed files with 108 additions and 1 deletion.
4 changes: 3 additions & 1 deletion packages/plugin-legacy/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -265,15 +265,17 @@ function viteLegacyPlugin(options: Options = {}): Plugin[] {
}

// legacy bundle
if (legacyPolyfills.size) {
if (options.polyfills !== false) {
// check if the target needs Promise polyfill because SystemJS relies on it
// https://github.com/systemjs/systemjs#ie11-support
await detectPolyfills(
`Promise.resolve(); Promise.all();`,
targets,
legacyPolyfills,
)
}

if (legacyPolyfills.size || !options.externalSystemJS) {
isDebug &&
console.log(
`[@vitejs/plugin-legacy] legacy polyfills:`,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { expect, test } from 'vitest'
import { isBuild, page, untilUpdated, viteTestUrl } from '~utils'

test.runIf(isBuild)('includes only a single script tag', async () => {
await page.goto(viteTestUrl + '/no-polyfills-no-systemjs.html')

await untilUpdated(
() => page.getAttribute('#vite-legacy-entry', 'data-src'),
/.\/assets\/index-legacy-(.+)\.js/,
true,
)

expect(await page.locator('script').count()).toBe(1)
expect(await page.locator('#vite-legacy-polyfill').count()).toBe(0)
expect(await page.locator('#vite-legacy-entry').count()).toBe(1)
})
20 changes: 20 additions & 0 deletions playground/legacy/__tests__/no-polyfills/no-polyfills.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { test } from 'vitest'
import { isBuild, page, untilUpdated, viteTestUrl } from '~utils'

test('should load and execute the JS file', async () => {
await page.goto(viteTestUrl + '/no-polyfills.html')
await untilUpdated(() => page.textContent('main'), '👋', true)
})

test.runIf(isBuild)('includes a script tag for SystemJS', async () => {
await untilUpdated(
() => page.getAttribute('#vite-legacy-polyfill', 'src'),
/.\/assets\/polyfills-legacy-(.+)\.js/,
true,
)
await untilUpdated(
() => page.getAttribute('#vite-legacy-entry', 'data-src'),
/.\/assets\/index-legacy-(.+)\.js/,
true,
)
})
3 changes: 3 additions & 0 deletions playground/legacy/no-polyfills-no-systemjs.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<meta charset="UTF-8" />
<main></main>
<script type="module" src="./no-polyfills-no-systemjs.js"></script>
1 change: 1 addition & 0 deletions playground/legacy/no-polyfills-no-systemjs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
document.querySelector('main').innerHTML = '👋'
3 changes: 3 additions & 0 deletions playground/legacy/no-polyfills.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<meta charset="UTF-8" />
<main></main>
<script type="module" src="./no-polyfills.js"></script>
1 change: 1 addition & 0 deletions playground/legacy/no-polyfills.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
document.querySelector('main').innerHTML = '👋'
2 changes: 2 additions & 0 deletions playground/legacy/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
"build": "vite build --debug legacy",
"build:custom-filename": "vite --config ./vite.config-custom-filename.js build --debug legacy",
"build:multiple-output": "vite --config ./vite.config-multiple-output.js build",
"build:no-polyfills": "vite --config ./vite.config-no-polyfills.js build",
"build:no-polyfills-no-systemjs": "vite --config ./vite.config-no-polyfills-no-systemjs.js build",
"debug": "node --inspect-brk ../../packages/vite/bin/vite",
"preview": "vite preview"
},
Expand Down
30 changes: 30 additions & 0 deletions playground/legacy/vite.config-no-polyfills-no-systemjs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import path from 'node:path'
import legacy from '@vitejs/plugin-legacy'
import { defineConfig } from 'vite'

export default defineConfig({
base: './',
plugins: [
legacy({
renderModernChunks: false,
polyfills: false,
externalSystemJS: true,
}),
{
name: 'remove crossorigin attribute',
transformIndexHtml: (html) => html.replaceAll('crossorigin', ''),
enforce: 'post',
},
],

build: {
rollupOptions: {
input: {
index: path.resolve(__dirname, 'no-polyfills-no-systemjs.html'),
},
},
},
testConfig: {
baseRoute: '/no-polyfills-no-systemjs/',
},
})
29 changes: 29 additions & 0 deletions playground/legacy/vite.config-no-polyfills.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import path from 'node:path'
import legacy from '@vitejs/plugin-legacy'
import { defineConfig } from 'vite'

export default defineConfig({
base: './',
plugins: [
legacy({
renderModernChunks: false,
polyfills: false,
}),
{
name: 'remove crossorigin attribute',
transformIndexHtml: (html) => html.replaceAll('crossorigin', ''),
enforce: 'post',
},
],

build: {
rollupOptions: {
input: {
index: path.resolve(__dirname, 'no-polyfills.html'),
},
},
},
testConfig: {
baseRoute: '/no-polyfills/',
},
})

0 comments on commit 27e5b11

Please sign in to comment.