Skip to content

Commit d5c53f2

Browse files
[#91] Fix manifest json includes non-existing css chunks (#93)
* fix: remove vitemetadata from output chunk to exclude all removed css * 3.1.1
1 parent 7e4c10e commit d5c53f2

File tree

5 files changed

+53
-3
lines changed

5 files changed

+53
-3
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vite-plugin-css-injected-by-js",
3-
"version": "3.1.0",
3+
"version": "3.1.1",
44
"description": "A Vite plugin that takes the CSS and adds it to the page through the JS. For those who want a single JS file.",
55
"main": "dist/cjs/index.js",
66
"module": "dist/esm/index.js",

src/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
22
buildCSSInjectionCode,
33
buildJsCssMap,
4+
clearImportedCssViteMetadataFromBundle,
45
globalCssInjection,
56
relativeCssInjection,
67
removeLinkStyleSheets,
@@ -104,6 +105,8 @@ export default function cssInjectedByJsPlugin({
104105
);
105106
}
106107

108+
clearImportedCssViteMetadataFromBundle(bundle, unusedCssAssets);
109+
107110
const htmlFiles = Object.keys(bundle).filter((i) => i.endsWith('.html'));
108111
for (const name of htmlFiles) {
109112
const htmlChunk = bundle[name] as OutputAsset;

src/utils.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,3 +272,18 @@ export function buildOutputChunkWithCssInjectionCode(
272272

273273
return jsAssetCode;
274274
}
275+
276+
export function clearImportedCssViteMetadataFromBundle(bundle: OutputBundle, unusedCssAssets: string[]): void {
277+
// Required to exclude removed files from manifest.json
278+
for (const key in bundle) {
279+
const chunk = bundle[key] as OutputChunk;
280+
if (chunk.viteMetadata && chunk.viteMetadata.importedCss.size > 0) {
281+
const importedCssFileNames = chunk.viteMetadata.importedCss;
282+
importedCssFileNames.forEach((importedCssFileName) => {
283+
if (!unusedCssAssets.includes(importedCssFileName)) {
284+
chunk.viteMetadata.importedCss = new Set();
285+
}
286+
});
287+
}
288+
}
289+
}

test/utils.spec.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type { PluginConfiguration } from '../src/interface';
44
import {
55
buildCSSInjectionCode,
66
buildJsCssMap,
7+
clearImportedCssViteMetadataFromBundle,
78
concatCssAndDeleteFromBundle,
89
extractCss,
910
getJsTargetBundleKeys,
@@ -527,5 +528,36 @@ describe('utils', () => {
527528
}
528529
});
529530
});
531+
532+
describe('manifest.json clear viteMetadata', () => {
533+
it('should not remove ununsedCssAssets', () => {
534+
const bundle = {
535+
'chunk-1.js': generateJsChunk('style', ['style.css']),
536+
'chunk-2.js': generateJsChunk('style', ['style.css']),
537+
};
538+
const unusedCssAssets = ['style.css'];
539+
540+
clearImportedCssViteMetadataFromBundle(bundle, unusedCssAssets);
541+
542+
const chunk1 = bundle['chunk-1.js'] as OutputChunk;
543+
const chunk2 = bundle['chunk-2.js'] as OutputChunk;
544+
expect(chunk1.viteMetadata.importedCss.size).toBe(1);
545+
expect(chunk2.viteMetadata.importedCss.size).toBe(1);
546+
});
547+
548+
it('should remove all importedCss', () => {
549+
const bundle: OutputBundle = {
550+
'chunk-1.js': generateJsChunk('style', ['style.css', 'style1.css', 'style2.css']),
551+
'chunk-2.js': generateJsChunk('style', ['style.css']),
552+
};
553+
const unusedCssAssets: string[] = [];
554+
555+
clearImportedCssViteMetadataFromBundle(bundle, unusedCssAssets);
556+
const chunk1 = bundle['chunk-1.js'] as OutputChunk;
557+
const chunk2 = bundle['chunk-2.js'] as OutputChunk;
558+
expect(chunk1.viteMetadata.importedCss.size).toBe(0);
559+
expect(chunk2.viteMetadata.importedCss.size).toBe(0);
560+
});
561+
});
530562
});
531563
});

0 commit comments

Comments
 (0)