diff --git a/packages/playground/preload/__tests__/preload.spec.ts b/packages/playground/preload/__tests__/preload.spec.ts new file mode 100644 index 00000000000000..eaee5e306cd7c5 --- /dev/null +++ b/packages/playground/preload/__tests__/preload.spec.ts @@ -0,0 +1,14 @@ +import { isBuild } from '../../testUtils' + +test('should have no 404s', () => { + browserLogs.forEach((msg) => { + expect(msg).not.toMatch('404') + }) +}) + +if (isBuild) { + test('dynamic import', async () => { + let appHtml = await page.content() + expect(appHtml).toMatch('This is home page.') + }) +} diff --git a/packages/playground/preload/index.html b/packages/playground/preload/index.html new file mode 100644 index 00000000000000..affed21f9791cf --- /dev/null +++ b/packages/playground/preload/index.html @@ -0,0 +1,8 @@ +
+ diff --git a/packages/playground/preload/package.json b/packages/playground/preload/package.json new file mode 100644 index 00000000000000..5f0ff00cb9f527 --- /dev/null +++ b/packages/playground/preload/package.json @@ -0,0 +1,19 @@ +{ + "name": "test-preload", + "private": true, + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "vite build", + "debug": "node --inspect-brk ../../vite/bin/vite", + "serve": "vite preview" + }, + "dependencies": { + "vue": "^3.0.8", + "vue-router": "^4.0.6" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^1.0.0", + "@vue/compiler-sfc": "^3.0.8" + } +} diff --git a/packages/playground/preload/router.js b/packages/playground/preload/router.js new file mode 100644 index 00000000000000..a02628099bf264 --- /dev/null +++ b/packages/playground/preload/router.js @@ -0,0 +1,16 @@ +import { createRouter, createWebHashHistory } from 'vue-router' +import Home from './src/components/Home.vue' + +const routes = [ + { path: '/', name: 'Home', component: Home }, + { + path: '/about', + name: 'About', + component: () => import('./src/components/About.vue') + } // Lazy load route component +] + +export default createRouter({ + routes, + history: createWebHashHistory() +}) diff --git a/packages/playground/preload/src/App.vue b/packages/playground/preload/src/App.vue new file mode 100644 index 00000000000000..f0550400dc4759 --- /dev/null +++ b/packages/playground/preload/src/App.vue @@ -0,0 +1,6 @@ + + + diff --git a/packages/playground/preload/src/components/About.vue b/packages/playground/preload/src/components/About.vue new file mode 100644 index 00000000000000..0721c7e53eb584 --- /dev/null +++ b/packages/playground/preload/src/components/About.vue @@ -0,0 +1,10 @@ + + + diff --git a/packages/playground/preload/src/components/Home.vue b/packages/playground/preload/src/components/Home.vue new file mode 100644 index 00000000000000..94d8850c47d28a --- /dev/null +++ b/packages/playground/preload/src/components/Home.vue @@ -0,0 +1,10 @@ + + + diff --git a/packages/playground/preload/vite.config.js b/packages/playground/preload/vite.config.js new file mode 100644 index 00000000000000..96fb82f51ed349 --- /dev/null +++ b/packages/playground/preload/vite.config.js @@ -0,0 +1,15 @@ +const vuePlugin = require('@vitejs/plugin-vue') + +module.exports = { + plugins: [vuePlugin()], + build: { + terserOptions: { + format: { + beautify: true + }, + compress: { + passes: 3 + } + } + } +} diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index 98aecac489f838..9672c5446bb5b0 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -26,7 +26,7 @@ const preloadMarkerRE = new RegExp(`"${preloadMarker}"`, 'g') */ function preload(baseModule: () => Promise<{}>, deps?: string[]) { // @ts-ignore - if (!__VITE_IS_MODERN__ || !deps) { + if (!__VITE_IS_MODERN__ || !deps || deps.length === 0) { return baseModule() } @@ -262,7 +262,12 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { addDeps(normalizedFile) } - const markPos = code.indexOf(preloadMarker, end) + let markPos = code.indexOf(preloadMarker, end) + // fix issue #3051 + if (markPos === -1 && imports.length === 1) { + markPos = code.indexOf(preloadMarker) + } + if (markPos > 0) { s.overwrite( markPos - 1, @@ -271,7 +276,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { // preload when there are actual other deps. deps.size > 1 ? `[${[...deps].map((d) => JSON.stringify(d)).join(',')}]` - : `void 0` + : `[]` ) } }