From 710db4aec9123ceae045330f3e9b92d99ac1fe73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E5=B9=B3?= Date: Tue, 1 Aug 2023 10:23:01 +0800 Subject: [PATCH] fix(bundler-vite): build error on windows (#11363) * feat(bundler-vite): fix build error on windows * feat(bundler-vite): use winPath --- .../src/plugins/deleteOutputFiles.test.ts | 49 +++++++++++++++++++ .../src/plugins/deleteOutputFiles.ts | 4 ++ 2 files changed, 53 insertions(+) create mode 100644 packages/bundler-vite/src/plugins/deleteOutputFiles.test.ts diff --git a/packages/bundler-vite/src/plugins/deleteOutputFiles.test.ts b/packages/bundler-vite/src/plugins/deleteOutputFiles.test.ts new file mode 100644 index 000000000000..111e8cc82884 --- /dev/null +++ b/packages/bundler-vite/src/plugins/deleteOutputFiles.test.ts @@ -0,0 +1,49 @@ +import deleteOutputFiles from './deleteOutputFiles'; + +test('test windows', async () => { + const files = [ + 'a\\b\\c', + 'd\\e\\f', + 'node_modules\\.tmp\\.bundler-vite-entry\\umi.html', + ]; + const beforeDelete = jest.fn(); + const plugin = deleteOutputFiles(files, beforeDelete) as any; + const output = { + 'a/b/c': { + fileName: 'a/b/c', + }, + 'd/e/f': { + fileName: 'd/e/f', + }, + 'node_modules/.tmp/.bundler-vite-entry/umi.html': { + fileName: 'node_modules/.tmp/.bundler-vite-entry/umi.html', + }, + }; + plugin.generateBundle?.({}, output); + expect(beforeDelete).toBeCalledTimes(3); + expect(output).toEqual({}); +}); + +test('test mac', async () => { + const files = [ + 'a/b/c', + 'd/e/f', + 'node_modules/.tmp/.bundler-vite-entry/umi.html', + ]; + const beforeDelete = jest.fn(); + const plugin = deleteOutputFiles(files, beforeDelete) as any; + const output = { + 'a/b/c': { + fileName: 'a/b/c', + }, + 'd/e/f': { + fileName: 'd/e/f', + }, + 'node_modules/.tmp/.bundler-vite-entry/umi.html': { + fileName: 'node_modules/.tmp/.bundler-vite-entry/umi.html', + }, + }; + plugin.generateBundle?.({}, output); + expect(beforeDelete).toBeCalledTimes(3); + expect(output).toEqual({}); +}); diff --git a/packages/bundler-vite/src/plugins/deleteOutputFiles.ts b/packages/bundler-vite/src/plugins/deleteOutputFiles.ts index a802fedc4c2c..bc489265676f 100644 --- a/packages/bundler-vite/src/plugins/deleteOutputFiles.ts +++ b/packages/bundler-vite/src/plugins/deleteOutputFiles.ts @@ -1,4 +1,6 @@ +import { winPath } from '@umijs/utils'; import type { Plugin } from '../../compiled/vite'; + // @ts-ignore type fileType = Parameters>[1]['file']; @@ -14,6 +16,8 @@ export default function deleteOutputFiles( name: 'bundler-vite:delete-output-files', generateBundle(_, output) { Object.keys(output).forEach((name) => { + // vite use '/' in windows + files = files.map((file) => winPath(file)); if (files.includes(output[name].fileName)) { beforeDelete(output[name]); delete output[name];