From 2caa3d780adf4134b138673ee3a5bcc8168ae4e8 Mon Sep 17 00:00:00 2001 From: Tim MacDonald Date: Mon, 25 Jul 2022 14:57:27 +1000 Subject: [PATCH 1/4] fix: normalise css paths in manifest on windows --- packages/vite/src/node/plugins/manifest.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/plugins/manifest.ts b/packages/vite/src/node/plugins/manifest.ts index e342102946904a..49ebe3957287db 100644 --- a/packages/vite/src/node/plugins/manifest.ts +++ b/packages/vite/src/node/plugins/manifest.ts @@ -103,7 +103,7 @@ export function manifestPlugin(config: ResolvedConfig): Plugin { function createAsset(chunk: OutputAsset): ManifestChunk { const manifestChunk: ManifestChunk = { file: chunk.fileName, - src: chunk.name + src: normalizePath(chunk.name!) } if (cssEntryFiles.has(chunk.name!)) manifestChunk.isEntry = true @@ -118,7 +118,7 @@ export function manifestPlugin(config: ResolvedConfig): Plugin { if (chunk.type === 'chunk') { manifest[getChunkName(chunk)] = createChunk(chunk) } else if (chunk.type === 'asset' && typeof chunk.name === 'string') { - manifest[chunk.name] = createAsset(chunk) + manifest[normalizePath(chunk.name)] = createAsset(chunk) } } From 400ce888dacb05ee11cf9f28044d37aba34e8338 Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Mon, 25 Jul 2022 18:06:32 +0900 Subject: [PATCH 2/4] test: add test for css path on windows in manifest --- .../backend-integration/__tests__/backend-integration.spec.ts | 2 ++ playground/backend-integration/dir/foo.css | 3 +++ playground/backend-integration/vite.config.js | 1 + 3 files changed, 6 insertions(+) create mode 100644 playground/backend-integration/dir/foo.css diff --git a/playground/backend-integration/__tests__/backend-integration.spec.ts b/playground/backend-integration/__tests__/backend-integration.spec.ts index f0589783cbecf8..a6b773bf791ddb 100644 --- a/playground/backend-integration/__tests__/backend-integration.spec.ts +++ b/playground/backend-integration/__tests__/backend-integration.spec.ts @@ -35,6 +35,7 @@ describe.runIf(isBuild)('build', () => { const cssAssetEntry = manifest['global.css'] const scssAssetEntry = manifest['nested/blue.scss'] const imgAssetEntry = manifest['../images/logo.png'] + const dirFooAssetEntry = manifest['../../dir/foo.css'] // '\\' should not be used even on windows expect(htmlEntry.css.length).toEqual(1) expect(htmlEntry.assets.length).toEqual(1) expect(cssAssetEntry?.file).not.toBeUndefined() @@ -44,6 +45,7 @@ describe.runIf(isBuild)('build', () => { expect(scssAssetEntry?.isEntry).toEqual(true) expect(imgAssetEntry?.file).not.toBeUndefined() expect(imgAssetEntry?.isEntry).toBeUndefined() + expect(dirFooAssetEntry).not.toBeUndefined() }) }) diff --git a/playground/backend-integration/dir/foo.css b/playground/backend-integration/dir/foo.css new file mode 100644 index 00000000000000..c2fad7486d3ab6 --- /dev/null +++ b/playground/backend-integration/dir/foo.css @@ -0,0 +1,3 @@ +.windows-path-foo { + color: blue; +} diff --git a/playground/backend-integration/vite.config.js b/playground/backend-integration/vite.config.js index b8bfa70bb43112..ce3f3361fc70d1 100644 --- a/playground/backend-integration/vite.config.js +++ b/playground/backend-integration/vite.config.js @@ -19,6 +19,7 @@ function BackendIntegrationExample() { .map((filename) => [path.relative(root, filename), filename]) entrypoints.push(['tailwindcss-colors', 'tailwindcss/colors.js']) + entrypoints.push(['foo.css', path.resolve(__dirname, './dir/foo.css')]) return { build: { From 85e73828466bf1d5c1425372b2b4da43da00c53f Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Mon, 25 Jul 2022 18:06:49 +0900 Subject: [PATCH 3/4] refactor: normalize chunk name --- packages/vite/src/node/plugins/css.ts | 2 +- packages/vite/src/node/plugins/manifest.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts index b4429961ef479a..d9c3c083740d75 100644 --- a/packages/vite/src/node/plugins/css.ts +++ b/packages/vite/src/node/plugins/css.ts @@ -533,7 +533,7 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin { : chunk.name const lang = path.extname(cssAssetName).slice(1) - const cssFileName = ensureFileExt(cssAssetName, '.css') + const cssFileName = normalizePath(ensureFileExt(cssAssetName, '.css')) if (chunk.isEntry && isPureCssChunk) cssEntryFiles.add(cssAssetName) diff --git a/packages/vite/src/node/plugins/manifest.ts b/packages/vite/src/node/plugins/manifest.ts index 49ebe3957287db..e342102946904a 100644 --- a/packages/vite/src/node/plugins/manifest.ts +++ b/packages/vite/src/node/plugins/manifest.ts @@ -103,7 +103,7 @@ export function manifestPlugin(config: ResolvedConfig): Plugin { function createAsset(chunk: OutputAsset): ManifestChunk { const manifestChunk: ManifestChunk = { file: chunk.fileName, - src: normalizePath(chunk.name!) + src: chunk.name } if (cssEntryFiles.has(chunk.name!)) manifestChunk.isEntry = true @@ -118,7 +118,7 @@ export function manifestPlugin(config: ResolvedConfig): Plugin { if (chunk.type === 'chunk') { manifest[getChunkName(chunk)] = createChunk(chunk) } else if (chunk.type === 'asset' && typeof chunk.name === 'string') { - manifest[normalizePath(chunk.name)] = createAsset(chunk) + manifest[chunk.name] = createAsset(chunk) } } From 07e3a4ba8ade24230f3ac1c62f69193a730c1860 Mon Sep 17 00:00:00 2001 From: sapphi-red Date: Mon, 25 Jul 2022 19:26:56 +0900 Subject: [PATCH 4/4] refactor: move normalizePath --- packages/vite/src/node/plugins/css.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts index d9c3c083740d75..b2df2df9f7f0a5 100644 --- a/packages/vite/src/node/plugins/css.ts +++ b/packages/vite/src/node/plugins/css.ts @@ -519,7 +519,9 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin { } function ensureFileExt(name: string, ext: string) { - return path.format({ ...path.parse(name), base: undefined, ext }) + return normalizePath( + path.format({ ...path.parse(name), base: undefined, ext }) + ) } if (config.build.cssCodeSplit) { @@ -533,7 +535,7 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin { : chunk.name const lang = path.extname(cssAssetName).slice(1) - const cssFileName = normalizePath(ensureFileExt(cssAssetName, '.css')) + const cssFileName = ensureFileExt(cssAssetName, '.css') if (chunk.isEntry && isPureCssChunk) cssEntryFiles.add(cssAssetName)