Back to Medusa

{metadata.title}

www/apps/resources/app/lint/rules/loader-must-be-exported-in-module-definition/page.mdx

2.17.02.1 KB
Original Source

export const metadata = { title: loader-must-be-exported-in-module-definition - ESLint plugin rules, }

{metadata.title}

This rule requires that loader files under a module's loaders directory are registered in the module's loaders array.

Severity

warn. This rule is enabled in the recommended preset.

What it Targets

This rule targets loader files under src/modules/<module>/loaders/. It reports a loader file that isn't referenced in the loaders array of the module's definition in index.ts.

The following loader is reported by the rule when it isn't registered in the module definition in index.ts:

ts
import { LoaderOptions } from "@medusajs/framework/types"

export default async function myLoader({
  container,
}: LoaderOptions) {
  // ...
}

Instead, register the loader in the module's loaders array in index.ts:

ts
import { Module } from "@medusajs/framework/utils"
import BlogModuleService from "./service"
import myLoader from "./loaders/my-loader"

export default Module("blog", {
  service: BlogModuleService,
  loaders: [myLoader],
})

Why it's Important

A loader only runs when it's registered in the module's loaders array. An unregistered loader file is dead code that never executes, which often points to a forgotten registration.

Learn more in the Modules documentation.

Fixable

This rule isn't auto-fixable.

Turn it Off

To turn off this rule, set it to off in your ESLint configuration:

ts
import { defineConfig } from "eslint/config"
import medusa from "@medusajs/eslint-plugin"

export default defineConfig([
  ...medusa.configs.recommended,
  {
    rules: {
      "@medusajs/loader-must-be-exported-in-module-definition": "off",
    },
  },
])

Or disable it for a single line using an inline comment:

ts
// eslint-disable-next-line @medusajs/loader-must-be-exported-in-module-definition
export default async function myLoader() {}