diff --git a/.changeset/quiet-use-client-warnings.md b/.changeset/quiet-use-client-warnings.md new file mode 100644 index 00000000..a720e1f2 --- /dev/null +++ b/.changeset/quiet-use-client-warnings.md @@ -0,0 +1,5 @@ +--- +'@doc-kit/generator-react': patch +--- + +Stop the Vite builds from warning about every `"use client"` directive in dependencies diff --git a/packages/react/src/html/bundlers/__tests__/vite.test.mjs b/packages/react/src/html/bundlers/__tests__/vite.test.mjs index 4f15ebe1..676ce4ec 100644 --- a/packages/react/src/html/bundlers/__tests__/vite.test.mjs +++ b/packages/react/src/html/bundlers/__tests__/vite.test.mjs @@ -84,6 +84,30 @@ describe('Vite configuration', () => { assert.strictEqual(config.build.manifest, 'manifest.json'); }); + it("leaves out module-level directive warnings unless they're asked for", () => { + /** + * @param {import('vite').UserConfig} [vite] + */ + const checksFor = vite => + createViteConfig({ + sources: new Map(), + input: {}, + server: false, + outDir: output, + config: getConfig('html'), + vite, + }).build.rolldownOptions.checks; + + assert.deepStrictEqual(checksFor(), { moduleLevelDirective: false }); + + const checks = { moduleLevelDirective: true, eval: false }; + + assert.deepStrictEqual( + checksFor({ build: { rolldownOptions: { checks } } }), + checks + ); + }); + it('keeps the server library self-contained', () => { const vite = { ssr: { diff --git a/packages/react/src/html/bundlers/vite.mjs b/packages/react/src/html/bundlers/vite.mjs index 73e3c004..4b2079cf 100644 --- a/packages/react/src/html/bundlers/vite.mjs +++ b/packages/react/src/html/bundlers/vite.mjs @@ -230,6 +230,15 @@ export const createViteConfig = ({ ...vite.build?.rolldownOptions, input, ...(server ? { external: [] } : {}), + + // Dependencies' `"use client"` directives are for React Server + // Components, which bundling drops and this site doesn't use. See + // https://rolldown.rs/in-depth/directives#other-directives + checks: { + moduleLevelDirective: false, + ...vite.build?.rolldownOptions?.checks, + }, + output: { ...vite.build?.rolldownOptions?.output, format: 'es',