{"id":19789,"library":"eslint-plugin-import-esm","title":"eslint-plugin-import-esm","description":"ESLint plugin v3.0.1 that enforces import/export paths to follow native ESM resolution by requiring explicit file extensions (e.g., '.mjs', '.js'). Works exclusively with ESLint v9+ flat config and is fully ESM. Released as stable; active development. Unlike eslint-plugin-import which validates path existence, this focuses on explicit-extension rule to prevent ambiguous ESM resolution. Automatically fixable via --fix.","status":"active","version":"3.0.1","language":"javascript","source_language":"en","source_url":"https://github.com/satazor/eslint-plugin-import-esm","tags":["javascript","eslint","eslintplugin","eslint-plugin","esm","node","resolution"],"install":[{"cmd":"npm install eslint-plugin-import-esm","lang":"bash","label":"npm"},{"cmd":"yarn add eslint-plugin-import-esm","lang":"bash","label":"yarn"},{"cmd":"pnpm add eslint-plugin-import-esm","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency; plugin requires ESLint v9+ flat config system","package":"eslint","optional":false}],"imports":[{"note":"ESM-only package; requires native ES module import syntax (not CJS).","wrong":"const importEsmPlugin = require('eslint-plugin-import-esm')","symbol":"default","correct":"import importEsmPlugin from 'eslint-plugin-import-esm'"},{"note":"Access via the default import object; using require() will fail since plugin is ESM-only.","wrong":"require('eslint-plugin-import-esm').configs.recommended","symbol":"configs.recommended","correct":"importEsmPlugin.configs.recommended"},{"note":"Rule name must be prefixed with 'import-esm/'. Requires configuration object with extension property.","wrong":"'explicit-extension': 'error'","symbol":"explicit-extension rule","correct":"'import-esm/explicit-extension': ['error', { extension: '.mjs' }]"}],"quickstart":{"code":"import { defineConfig } from \"eslint/config\";\nimport importEsmPlugin from 'eslint-plugin-import-esm';\n\nexport default defineConfig([\n  importEsmPlugin.configs.recommended,\n  {\n    rules: {\n      'import-esm/explicit-extension': ['error', { extension: '.mjs' }]\n    }\n  }\n]);","lang":"typescript","description":"Configures ESLint v9 flat config with recommended preset and explicit .mjs extension rule."},"warnings":[{"fix":"Migrate to ESLint flat config. Use defineConfig from 'eslint/config' and apply plugin configs as shown.","message":"Plugin requires ESLint v9+ with flat config; does not support .eslintrc or legacy config.","severity":"breaking","affected_versions":">=3.0.0"},{"fix":"Use import statement in an ESM context (module type in package.json or .mjs file).","message":"Plugin is ESM-only; cannot be loaded with require().","severity":"breaking","affected_versions":">=3.0.0"},{"fix":"Upgrade Node.js to version 18.0.0 or newer.","message":"Node.js >= 18.0.0 required; does not work on older versions.","severity":"breaking","affected_versions":">=3.0.0"},{"fix":"Use 'import-esm/explicit-extension' instead of 'explicit-extension'.","message":"Rule name must be prefixed with 'import-esm/' when configuring in rules object.","severity":"gotcha","affected_versions":">=3.0.0"},{"fix":"Provide configuration: ['error', { extension: '.mjs' }] or ['warn', { extension: '.js' }].","message":"The 'explicit-extension' rule requires an option object with 'extension' property. Default extension is '.js' if not specified.","severity":"gotcha","affected_versions":">=3.0.0"}],"env_vars":null,"last_verified":"2026-04-25T00:00:00.000Z","next_check":"2026-07-24T00:00:00.000Z","problems":[{"fix":"Run 'npm install eslint-plugin-import-esm --save-dev' and ensure it's in package.json dependencies.","cause":"Missing dependency or incorrect installation.","error":"Error: Cannot find module 'eslint-plugin-import-esm'"},{"fix":"Update ESLint to v9+ with 'npm install eslint@9 --save-dev'.","cause":"Using ESLint version below 9.0.0.","error":"Error: Plugin could not be loaded: eslint-plugin-import-esm. It requires ESLint v9 or higher."},{"fix":"Use 'import importEsmPlugin from 'eslint-plugin-import-esm'' in an ESM context.","cause":"Attempting to load the plugin with require() instead of import.","error":"Error [ERR_REQUIRE_ESM]: require() of ES Module ... from ... not supported."},{"fix":"Use 'import-esm/explicit-extension' in the rules object.","cause":"Using the rule name without the 'import-esm/' prefix.","error":"Invalid configuration: Rule 'explicit-extension' not found."}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}