From b726a410937c0015c7bdada1adc865cd06e14cd3 Mon Sep 17 00:00:00 2001 From: TrickyPi <530257315@qq.com> Date: Sat, 5 Mar 2022 15:34:26 +0800 Subject: [PATCH] fix(vite): always throw error when evaluating an wrong SSR module --- .../vite/src/node/__tests__/basic.spec.ts | 31 +++++++++++++++++++ .../src/node/__tests__/fixtures/basic-bad.js | 2 ++ packages/vite/src/node/ssr/ssrModuleLoader.ts | 1 + 3 files changed, 34 insertions(+) create mode 100644 packages/vite/src/node/__tests__/basic.spec.ts create mode 100644 packages/vite/src/node/__tests__/fixtures/basic-bad.js diff --git a/packages/vite/src/node/__tests__/basic.spec.ts b/packages/vite/src/node/__tests__/basic.spec.ts new file mode 100644 index 00000000000000..f573915f238fab --- /dev/null +++ b/packages/vite/src/node/__tests__/basic.spec.ts @@ -0,0 +1,31 @@ +import { createServer } from '../server/index' +import { resolve } from 'path' + +const badjs = resolve(__dirname, './fixtures/basic-bad.js') +const THROW_MESSAGE = 'it is an expected error' + +describe('test ssrLoadModule', () => { + test('always throw error when evaluating an wrong SSR module', async () => { + const viteServer = await createServer() + const spy = jest.spyOn(console, 'error').mockImplementation(() => {}) + const expectedErrors = [] + for (const i of [0, 1]) { + try { + await viteServer.ssrLoadModule(badjs) + } catch (e) { + expectedErrors.push(e) + } + } + await viteServer.close() + expect(expectedErrors).toHaveLength(2) + expectedErrors.forEach((error) => { + expect(error?.message).toContain(THROW_MESSAGE) + }) + expect(spy).toBeCalledTimes(2) + spy.mock.calls.forEach(([info]) => { + expect(info).toContain('Error when evaluating SSR module') + expect(info).toContain(THROW_MESSAGE) + }) + spy.mockClear() + }) +}) diff --git a/packages/vite/src/node/__tests__/fixtures/basic-bad.js b/packages/vite/src/node/__tests__/fixtures/basic-bad.js new file mode 100644 index 00000000000000..a51a0519d34003 --- /dev/null +++ b/packages/vite/src/node/__tests__/fixtures/basic-bad.js @@ -0,0 +1,2 @@ +export const bad = 1 +throw new Error('it is an expected error') diff --git a/packages/vite/src/node/ssr/ssrModuleLoader.ts b/packages/vite/src/node/ssr/ssrModuleLoader.ts index de31c6a20266c5..32f30b20c30e89 100644 --- a/packages/vite/src/node/ssr/ssrModuleLoader.ts +++ b/packages/vite/src/node/ssr/ssrModuleLoader.ts @@ -202,6 +202,7 @@ async function instantiateModule( ssrExportAll ) } catch (e) { + mod.ssrModule = null if (e.stack && fixStacktrace !== false) { const stacktrace = ssrRewriteStacktrace(e.stack, moduleGraph) rebindErrorStacktrace(e, stacktrace)