⚠️ Renamed fromrollup-plugin-im-client-component. The unscoped package is deprecated and will no longer receive updates. Update your imports:- import clientDirective from 'rollup-plugin-im-client-component'; + import clientDirective from '@stylelish/rollup-plugin-im-client-component';
Let your components say 'use client' themselves
- ✨ Auto-inject
'use client'based on React client API detection - 🎯 Specifier-level matching (only hooks and client APIs, not
jsx-runtime) - 📦 Source map preservation
- 🔧 Compatible with Vite, Rollup, and Rolldown
- Node.js 20+
pnpm add -D @stylelish/rollup-plugin-im-client-componentvite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import clientDirective from '@stylelish/rollup-plugin-im-client-component';
export default defineConfig({
build: {
lib: {
entry: './src/index.ts',
formats: ['es'],
},
rollupOptions: {
output: {
preserveModules: true,
},
},
},
plugins: [react(), clientDirective()],
});rollup.config.js
import clientDirective from '@stylelish/rollup-plugin-im-client-component';
export default {
input: 'src/index.ts',
output: {
dir: 'dist',
format: 'es',
preserveModules: true,
},
plugins: [clientDirective()],
};- Hooks into
renderChunk(output phase, after bundling) - Parses import statements in each output chunk
- Detects React client-side API imports (
useState,useEffect, etc.) - Prepends
'use client'directive to matched files
Note: Use with
preserveModules: trueso each component gets its own chunk. Otherwise the directive may be applied to a single bundled file.
| Option | Type | Default | Description |
|---|---|---|---|
clientPatterns |
ClientPattern[] |
Built-in React patterns | Completely replace default detection patterns |
extraPatterns |
ClientPattern[] |
[] |
Additional patterns merged with defaults |
exclude |
string[] |
['**/*.css.js'] |
Glob patterns to skip injection |
include |
string[] |
[] |
Glob patterns to always inject |
directive |
string |
'use client' |
Directive string to inject |
clientDirective({
extraPatterns: [
{ source: /^@radix-ui\/react-/ },
{ source: /^motion\// },
],
});clientDirective({
include: ['**/components/**/*.js'],
});Hooks: useState, useEffect, useRef, useCallback, useMemo, useContext, useReducer, useId, useLayoutEffect, useInsertionEffect, useImperativeHandle, useDebugValue, useSyncExternalStore, useTransition, useDeferredValue, useOptimistic, useActionState
Client APIs: use, createContext, forwardRef, memo, lazy, startTransition
createPortal, flushSync
react/jsx-runtimeis intentionally excluded since all components import it.