From 71cfbfef9a1ba22d4389d8eaec603eacf2299206 Mon Sep 17 00:00:00 2001 From: likui <2218301630@qq.com> Date: Sat, 16 May 2020 20:13:19 +0800 Subject: [PATCH 1/3] fix: just return content with `devFlag` + html content fix #161 --- src/node/server/serverPluginModuleRewrite.ts | 49 +++++++++++--------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/src/node/server/serverPluginModuleRewrite.ts b/src/node/server/serverPluginModuleRewrite.ts index bd220a93205876..2a13e4a7ddf497 100644 --- a/src/node/server/serverPluginModuleRewrite.ts +++ b/src/node/server/serverPluginModuleRewrite.ts @@ -62,29 +62,34 @@ export const moduleRewritePlugin: ServerPlugin = ({ await initLexer let hasInjectedDevFlag = false const importer = '/index.html' - return html!.replace(scriptRE, (matched, openTag, script) => { - const devFlag = hasInjectedDevFlag ? `` : devInjectionCode - hasInjectedDevFlag = true - if (script) { - return `${devFlag}${openTag}${rewriteImports( - root, - script, - importer, - resolver - )}` - } else { - const srcAttr = openTag.match(srcRE) - if (srcAttr) { - // register script as a import dep for hmr - const importee = cleanUrl( - slash(path.resolve('/', srcAttr[1] || srcAttr[2])) - ) - debugHmr(` ${importer} imports ${importee}`) - ensureMapEntry(importerMap, importee).add(importer) + const devFlag = hasInjectedDevFlag ? `` : devInjectionCode + return ( + devFlag + + html!.replace(scriptRE, (matched, openTag, script) => { + debugHmr(matched, openTag, script) + + hasInjectedDevFlag = true + if (script) { + return `${openTag}${rewriteImports( + root, + script, + importer, + resolver + )}` + } else { + const srcAttr = openTag.match(srcRE) + if (srcAttr) { + // register script as a import dep for hmr + const importee = cleanUrl( + slash(path.resolve('/', srcAttr[1] || srcAttr[2])) + ) + debugHmr(` ${importer} imports ${importee}`) + ensureMapEntry(importerMap, importee).add(importer) + } + return `${matched}` } - return `${devFlag}${matched}` - } - }) + }) + ) } app.use(async (ctx, next) => { From fcf250ecb1c50082b3baa3172e78cbae8907c7af Mon Sep 17 00:00:00 2001 From: likui <2218301630@qq.com> Date: Sat, 16 May 2020 21:27:47 +0800 Subject: [PATCH 2/3] fix: ci From 72cd992301253db844b04f45eb4b297583fc0df5 Mon Sep 17 00:00:00 2001 From: likui <2218301630@qq.com> Date: Sat, 16 May 2020 23:31:17 +0800 Subject: [PATCH 3/3] fix: support multi entry for dev fix #160 --- playground/test.html | 12 ++++++++++++ playground/vite.config.ts | 3 +++ src/node/config.ts | 5 +++++ src/node/server/serverPluginModuleRewrite.ts | 12 +++++++----- test/test.js | 5 +++++ 5 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 playground/test.html diff --git a/playground/test.html b/playground/test.html new file mode 100644 index 00000000000000..16156e816fb366 --- /dev/null +++ b/playground/test.html @@ -0,0 +1,12 @@ + + + + + Vite App + + + +
+ + + diff --git a/playground/vite.config.ts b/playground/vite.config.ts index 91ff919d7d0c6a..3c2d473588b0f1 100644 --- a/playground/vite.config.ts +++ b/playground/vite.config.ts @@ -6,6 +6,9 @@ const config: UserConfig = { alias: { alias: '/aliased' }, + entry: { + test: './test.html' + }, jsx: 'preact', minify: false, serviceWorker: !!process.env.USE_SW, diff --git a/src/node/config.ts b/src/node/config.ts index 648ccea3d2776b..2fcfe6c4fcd61e 100644 --- a/src/node/config.ts +++ b/src/node/config.ts @@ -26,6 +26,11 @@ export interface SharedConfig { * @default process.cwd() */ root?: string + /** + * todo work for build + * Project entry. The `index.html` is default included. + * */ + entry?: Record /** * Import alias. Can only be exact mapping, does not support wildcard syntax. */ diff --git a/src/node/server/serverPluginModuleRewrite.ts b/src/node/server/serverPluginModuleRewrite.ts index 2a13e4a7ddf497..dafa5e7ae09e9d 100644 --- a/src/node/server/serverPluginModuleRewrite.ts +++ b/src/node/server/serverPluginModuleRewrite.ts @@ -58,10 +58,9 @@ export const moduleRewritePlugin: ServerPlugin = ({ const scriptRE = /(]*>)([\s\S]*?)<\/script>/gm const srcRE = /\bsrc=(?:"([^"]+)"|'([^']+)'|([^'"\s]+)\b)/ - async function rewriteIndex(html: string) { + async function rewriteIndex(html: string, importer: string = '/index.html') { await initLexer let hasInjectedDevFlag = false - const importer = '/index.html' const devFlag = hasInjectedDevFlag ? `` : devInjectionCode return ( devFlag + @@ -99,13 +98,16 @@ export const moduleRewritePlugin: ServerPlugin = ({ return } - if (ctx.path === '/index.html') { + if ( + ctx.path === '/index.html' || + Object.values(config.entry as object).includes(ctx.path) + ) { let html = await readBody(ctx.body) if (html && rewriteCache.has(html)) { - debug('/index.html: serving from cache') + debug(`${ctx.path}: serving from cache`) ctx.body = rewriteCache.get(html) } else if (html) { - ctx.body = await rewriteIndex(html) + ctx.body = await rewriteIndex(html, ctx.path) rewriteCache.set(html, ctx.body) } return diff --git a/test/test.js b/test/test.js index 8858e4630a92cb..139a7a1d175587 100644 --- a/test/test.js +++ b/test/test.js @@ -372,6 +372,11 @@ describe('vite', () => { declareTests(false) + test('multi entry', async () => { + await page.goto('http://localhost:3000/test.html') + expect(await getText('h1')).toMatch('Vite Playground') + }) + // Assert that all edited files are reflected on page reload // i.e. service-worker cache is correctly busted test('sw cache busting', async () => {