diff --git a/packages/vite-plugin-monkey/src/node/_util.ts b/packages/vite-plugin-monkey/src/node/_util.ts index 639fd73..d3e0fef 100644 --- a/packages/vite-plugin-monkey/src/node/_util.ts +++ b/packages/vite-plugin-monkey/src/node/_util.ts @@ -4,7 +4,7 @@ import { readFileSync } from 'node:fs'; import fs from 'node:fs/promises'; import path from 'node:path'; import { pathToFileURL } from 'node:url'; -import type { OutputBundle, PluginContext } from 'rollup'; +import type { OutputBundle, PluginContext, OutputChunk } from 'rollup'; import { normalizePath, transformWithEsbuild } from 'vite'; import { logger } from './_logger'; import { FinalMonkeyOption } from './types'; @@ -308,19 +308,26 @@ export async function* walk(dirPath: string) { export const collectGrant = ( context: PluginContext, - bundleOrCode: OutputBundle | string | string[], + chunks: OutputChunk[], + injectCssCode: string | undefined, + minify: boolean, ): Set => { - const codes: string[] = []; - if (typeof bundleOrCode == 'string') { - codes.push(bundleOrCode); - } else if (Array.isArray(bundleOrCode)) { - codes.push(...bundleOrCode); - } else { - Object.values(bundleOrCode).forEach((chunk) => { - if (chunk.type == 'chunk') { - codes.push(chunk.code); - } - }); + const codes = new Set(); + if (injectCssCode) { + codes.add(injectCssCode); + } + for (const chunk of chunks) { + if (minify) { + // https://github.com/lisonge/vite-plugin-monkey/issues/166 + const modules = Object.values(chunk.modules); + modules.forEach((m) => { + const code = m.code; + if (code) { + codes.add(code); + } + }); + } + codes.add(chunk.code); } const unusedMembers = new Set(GM_keywords.filter((s) => s.includes(`.`))); const unusedIdentifiers = new Set( diff --git a/packages/vite-plugin-monkey/src/node/plugins/finalBundle.ts b/packages/vite-plugin-monkey/src/node/plugins/finalBundle.ts index 3524fac..2f0a3bc 100644 --- a/packages/vite-plugin-monkey/src/node/plugins/finalBundle.ts +++ b/packages/vite-plugin-monkey/src/node/plugins/finalBundle.ts @@ -1,5 +1,5 @@ import type { OutputChunk, RollupOutput } from 'rollup'; -import { Plugin, build } from 'vite'; +import { Plugin, ResolvedConfig, build } from 'vite'; import { lazyValue } from '../_lazy'; import { collectGrant, @@ -23,10 +23,14 @@ const polyfillId = '\0vite/legacy-polyfills'; const systemJsImportMapPrefix = `user`; export const finalBundlePlugin = (finalOption: FinalMonkeyOption): Plugin => { + let viteConfig: ResolvedConfig; return { name: 'monkey:finalBundle', apply: 'build', enforce: 'post', + async configResolved(resolvedConfig) { + viteConfig = resolvedConfig; + }, async generateBundle(_, rawBundle) { const entryChunks: OutputChunk[] = []; const chunks: OutputChunk[] = []; @@ -213,7 +217,9 @@ export const finalBundlePlugin = (finalOption: FinalMonkeyOption): Plugin => { if (finalOption.build.autoGrant) { collectGrantSet = collectGrant( this, - chunks.map((s) => s.code).concat(injectCssCode || ``), + chunks, + injectCssCode, + viteConfig.build.minify !== false, ); } else { collectGrantSet = new Set();