Skip to content

Instantly share code, notes, and snippets.

@jeremy-code
Last active February 14, 2025 22:38
Show Gist options
  • Save jeremy-code/548a9ffda0aba85523251c061a9feb30 to your computer and use it in GitHub Desktop.
Save jeremy-code/548a9ffda0aba85523251c061a9feb30 to your computer and use it in GitHub Desktop.
eslint-plugin-react-refresh/next.js

I needed a place to put this and it didn't feel deserving of its own package or repo, hence here it is.

eslint-plugin-react-refresh settings for Next.js for rule "react-refresh/only-export-components" exports in Next.js.

For more information, see Next.js: Introduction > Architecture > Fast Refresh#How It Works

FYI some other exports that are not here because they shouldn't be alongside JSX are:

[
  /**
   * {@link https://nextjs.org/docs/app/api-reference/file-conventions/middleware#config-object-optional}
   */
  "config",
  /**
   *
   * @see {@link https://nextjs.org/docs/app/api-reference/file-conventions/metadata/manifest}
   */
  "manifest",
  /**
   * @see {@link https://nextjs.org/docs/app/api-reference/file-conventions/metadata/robots}
   */
  "robots",
  /**
   * @see {@link https://nextjs.org/docs/app/api-reference/functions/generate-sitemaps}
   */
  "generateSitemaps",
  /**
   * @see {@link https://nextjs.org/docs/app/api-reference/file-conventions/metadata/sitemap}
   */
  "sitemap",
]
import reactRefresh from "eslint-plugin-react-refresh";
export default [
reactRefresh.configs.recommended,
{
rules: {
"react-refresh/only-export-components": [
"error",
{
allowExportNames: [
/**
* Route segment config exports. Will be disabled if `dynamicIO` is
* enabled in `next.config.js`.
*
* @see {@link https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config}
*/
"experimental_ppr",
"dynamic",
"dynamicParams",
"revalidate",
"fetchCache",
"runtime",
"preferredRegion",
"maxDuration",
/**
* @see {@link https://nextjs.org/docs/app/api-reference/functions/generate-image-metadata}
*/
"generateImageMetadata",
/**
* @see {@link https://nextjs.org/docs/app/api-reference/functions/generate-static-params}
*/
"generateStaticParams",
/**
* @see {@link https://nextjs.org/docs/app/api-reference/functions/generate-metadata#the-metadata-object}
*/
"metadata",
/**
* @see {@link https://nextjs.org/docs/app/api-reference/functions/generate-metadata#generatemetadata-function}
*/
"generateMetadata",
/**
* @see {@link https://nextjs.org/docs/app/api-reference/functions/generate-viewport#the-viewport-object}
*/
"viewport",
/**
* @see {@link https://nextjs.org/docs/app/api-reference/functions/generate-viewport#generateviewport-function}
*/
"generateViewport",
/**
* Image Metadata
*
* @see {@link https://nextjs.org/docs/app/api-reference/file-conventions/metadata/app-icons#config-exports}
* @see {@link https://nextjs.org/docs/app/api-reference/file-conventions/metadata/opengraph-image#config-exports}
*/
"size",
"contentType",
"alt",
],
},
],
},
},
];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment