{"id":13464811,"url":"https://github.com/mysticatea/eslint-plugin-node","last_synced_at":"2025-05-14T00:06:31.381Z","repository":{"id":40002841,"uuid":"46702870","full_name":"mysticatea/eslint-plugin-node","owner":"mysticatea","description":"Additional ESLint's rules for Node.js","archived":false,"fork":false,"pushed_at":"2024-06-18T08:26:35.000Z","size":988,"stargazers_count":962,"open_issues_count":128,"forks_count":176,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-05-05T10:01:42.358Z","etag":null,"topics":["coding-style","ecmascript","eslint","eslint-plugin","javascript","node","nodejs","npm","npm-module","npm-package","static-code-analysis"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mysticatea.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"mysticatea"}},"created_at":"2015-11-23T07:09:51.000Z","updated_at":"2025-05-05T05:12:33.000Z","dependencies_parsed_at":"2024-06-18T11:18:04.630Z","dependency_job_id":null,"html_url":"https://github.com/mysticatea/eslint-plugin-node","commit_stats":{"total_commits":380,"total_committers":38,"mean_commits":10.0,"dds":"0.22631578947368425","last_synced_commit":"8ef07af5711b74199745a619c6f522e1e32acfaf"},"previous_names":[],"tags_count":59,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mysticatea%2Feslint-plugin-node","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mysticatea%2Feslint-plugin-node/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mysticatea%2Feslint-plugin-node/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mysticatea%2Feslint-plugin-node/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mysticatea","download_url":"https://codeload.github.com/mysticatea/eslint-plugin-node/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254043520,"owners_count":22004965,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["coding-style","ecmascript","eslint","eslint-plugin","javascript","node","nodejs","npm","npm-module","npm-package","static-code-analysis"],"created_at":"2024-07-31T14:00:50.773Z","updated_at":"2025-05-14T00:06:31.361Z","avatar_url":"https://github.com/mysticatea.png","language":"JavaScript","readme":"This project has been no longer maintained. Please consider to use https://github.com/eslint-community/eslint-plugin-n.\n\n# eslint-plugin-node\n\n[![npm version](https://img.shields.io/npm/v/eslint-plugin-node.svg)](https://www.npmjs.com/package/eslint-plugin-node)\n[![Downloads/month](https://img.shields.io/npm/dm/eslint-plugin-node.svg)](http://www.npmtrends.com/eslint-plugin-node)\n[![Build Status](https://github.com/mysticatea/eslint-plugin-node/workflows/CI/badge.svg)](https://github.com/mysticatea/eslint-plugin-node/actions)\n[![Coverage Status](https://codecov.io/gh/mysticatea/eslint-plugin-node/branch/master/graph/badge.svg)](https://codecov.io/gh/mysticatea/eslint-plugin-node)\n[![Dependency Status](https://david-dm.org/mysticatea/eslint-plugin-node.svg)](https://david-dm.org/mysticatea/eslint-plugin-node)\n\nAdditional ESLint's rules for Node.js\n\n## 💿 Install \u0026 Usage\n\n```\n$ npm install --save-dev eslint eslint-plugin-node\n```\n\n- Requires Node.js `\u003e=8.10.0`\n- Requires ESLint `\u003e=5.16.0`\n\n**Note:** It recommends a use of [the \"engines\" field of package.json](https://docs.npmjs.com/files/package.json#engines). The \"engines\" field is used by `node/no-unsupported-features/*` rules.\n\n**.eslintrc.json** (An example)\n\n```jsonc\n{\n    \"extends\": [\n        \"eslint:recommended\",\n        \"plugin:node/recommended\"\n    ],\n    \"parserOptions\": {\n        // Only ESLint 6.2.0 and later support ES2020.\n        \"ecmaVersion\": 2020\n    },\n    \"rules\": {\n        \"node/exports-style\": [\"error\", \"module.exports\"],\n        \"node/file-extension-in-import\": [\"error\", \"always\"],\n        \"node/prefer-global/buffer\": [\"error\", \"always\"],\n        \"node/prefer-global/console\": [\"error\", \"always\"],\n        \"node/prefer-global/process\": [\"error\", \"always\"],\n        \"node/prefer-global/url-search-params\": [\"error\", \"always\"],\n        \"node/prefer-global/url\": [\"error\", \"always\"],\n        \"node/prefer-promises/dns\": \"error\",\n        \"node/prefer-promises/fs\": \"error\"\n    }\n}\n```\n\n**package.json** (An example)\n\n```json\n{\n    \"name\": \"your-module\",\n    \"version\": \"1.0.0\",\n    \"type\": \"commonjs\",\n    \"engines\": {\n        \"node\": \"\u003e=8.10.0\"\n    }\n}\n```\n\n## 📖 Rules\n\n- ⭐️ - the mark of recommended rules.\n- ✒️ - the mark of fixable rules.\n\n\u003c!--RULES_TABLE_START--\u003e\n### Possible Errors\n\n| Rule ID | Description |    |\n|:--------|:------------|:--:|\n| [node/handle-callback-err](./docs/rules/handle-callback-err.md) | require error handling in callbacks |  |\n| [node/no-callback-literal](./docs/rules/no-callback-literal.md) | ensure Node.js-style error-first callback pattern is followed |  |\n| [node/no-exports-assign](./docs/rules/no-exports-assign.md) | disallow the assignment to `exports` | ⭐️ |\n| [node/no-extraneous-import](./docs/rules/no-extraneous-import.md) | disallow `import` declarations which import extraneous modules | ⭐️ |\n| [node/no-extraneous-require](./docs/rules/no-extraneous-require.md) | disallow `require()` expressions which import extraneous modules | ⭐️ |\n| [node/no-missing-import](./docs/rules/no-missing-import.md) | disallow `import` declarations which import non-existence modules | ⭐️ |\n| [node/no-missing-require](./docs/rules/no-missing-require.md) | disallow `require()` expressions which import non-existence modules | ⭐️ |\n| [node/no-new-require](./docs/rules/no-new-require.md) | disallow `new` operators with calls to `require` |  |\n| [node/no-path-concat](./docs/rules/no-path-concat.md) | disallow string concatenation with `__dirname` and `__filename` |  |\n| [node/no-process-exit](./docs/rules/no-process-exit.md) | disallow the use of `process.exit()` |  |\n| [node/no-unpublished-bin](./docs/rules/no-unpublished-bin.md) | disallow `bin` files that npm ignores | ⭐️ |\n| [node/no-unpublished-import](./docs/rules/no-unpublished-import.md) | disallow `import` declarations which import private modules | ⭐️ |\n| [node/no-unpublished-require](./docs/rules/no-unpublished-require.md) | disallow `require()` expressions which import private modules | ⭐️ |\n| [node/no-unsupported-features/es-builtins](./docs/rules/no-unsupported-features/es-builtins.md) | disallow unsupported ECMAScript built-ins on the specified version | ⭐️ |\n| [node/no-unsupported-features/es-syntax](./docs/rules/no-unsupported-features/es-syntax.md) | disallow unsupported ECMAScript syntax on the specified version | ⭐️ |\n| [node/no-unsupported-features/node-builtins](./docs/rules/no-unsupported-features/node-builtins.md) | disallow unsupported Node.js built-in APIs on the specified version | ⭐️ |\n| [node/process-exit-as-throw](./docs/rules/process-exit-as-throw.md) | make `process.exit()` expressions the same code path as `throw` | ⭐️ |\n| [node/shebang](./docs/rules/shebang.md) | suggest correct usage of shebang | ⭐️✒️ |\n\n### Best Practices\n\n| Rule ID | Description |    |\n|:--------|:------------|:--:|\n| [node/no-deprecated-api](./docs/rules/no-deprecated-api.md) | disallow deprecated APIs | ⭐️ |\n\n### Stylistic Issues\n\n| Rule ID | Description |    |\n|:--------|:------------|:--:|\n| [node/callback-return](./docs/rules/callback-return.md) | require `return` statements after callbacks |  |\n| [node/exports-style](./docs/rules/exports-style.md) | enforce either `module.exports` or `exports` |  |\n| [node/file-extension-in-import](./docs/rules/file-extension-in-import.md) | enforce the style of file extensions in `import` declarations | ✒️ |\n| [node/global-require](./docs/rules/global-require.md) | require `require()` calls to be placed at top-level module scope |  |\n| [node/no-mixed-requires](./docs/rules/no-mixed-requires.md) | disallow `require` calls to be mixed with regular variable declarations |  |\n| [node/no-process-env](./docs/rules/no-process-env.md) | disallow the use of `process.env` |  |\n| [node/no-restricted-import](./docs/rules/no-restricted-import.md) | disallow specified modules when loaded by `import` declarations |  |\n| [node/no-restricted-require](./docs/rules/no-restricted-require.md) | disallow specified modules when loaded by `require` |  |\n| [node/no-sync](./docs/rules/no-sync.md) | disallow synchronous methods |  |\n| [node/prefer-global/buffer](./docs/rules/prefer-global/buffer.md) | enforce either `Buffer` or `require(\"buffer\").Buffer` |  |\n| [node/prefer-global/console](./docs/rules/prefer-global/console.md) | enforce either `console` or `require(\"console\")` |  |\n| [node/prefer-global/process](./docs/rules/prefer-global/process.md) | enforce either `process` or `require(\"process\")` |  |\n| [node/prefer-global/text-decoder](./docs/rules/prefer-global/text-decoder.md) | enforce either `TextDecoder` or `require(\"util\").TextDecoder` |  |\n| [node/prefer-global/text-encoder](./docs/rules/prefer-global/text-encoder.md) | enforce either `TextEncoder` or `require(\"util\").TextEncoder` |  |\n| [node/prefer-global/url-search-params](./docs/rules/prefer-global/url-search-params.md) | enforce either `URLSearchParams` or `require(\"url\").URLSearchParams` |  |\n| [node/prefer-global/url](./docs/rules/prefer-global/url.md) | enforce either `URL` or `require(\"url\").URL` |  |\n| [node/prefer-promises/dns](./docs/rules/prefer-promises/dns.md) | enforce `require(\"dns\").promises` |  |\n| [node/prefer-promises/fs](./docs/rules/prefer-promises/fs.md) | enforce `require(\"fs\").promises` |  |\n\n### Deprecated rules\n\nThese rules have been deprecated in accordance with the [deprecation policy](https://eslint.org/docs/user-guide/rule-deprecation), and replaced by newer rules:\n\n| Rule ID | Replaced by |\n|:--------|:------------|\n| [node/no-hide-core-modules](./docs/rules/no-hide-core-modules.md) | (nothing) |\n| [node/no-unsupported-features](./docs/rules/no-unsupported-features.md) | [node/no-unsupported-features/es-syntax](./docs/rules/no-unsupported-features/es-syntax.md) and [node/no-unsupported-features/es-builtins](./docs/rules/no-unsupported-features/es-builtins.md) |\n\n\u003c!--RULES_TABLE_END--\u003e\n\n## 🔧 Configs\n\nThis plugin provides three configs:\n\n- `plugin:node/recommended` considers both CommonJS and ES Modules. If [`\"type\":\"module\"` field](https://medium.com/@nodejs/announcing-a-new-experimental-modules-1be8d2d6c2ff#b023) existed in package.json then it considers files as ES Modules. Otherwise it considers files as CommonJS. In addition, it considers `*.mjs` files as ES Modules and `*.cjs` files as CommonJS.\n- `plugin:node/recommended-module` considers all files as ES Modules.\n- `plugin:node/recommended-script` considers all files as CommonJS.\n\nThose preset config:\n\n- enable [no-process-exit](http://eslint.org/docs/rules/no-process-exit) rule because [the official document](https://nodejs.org/api/process.html#process_process_exit_code) does not recommend a use of `process.exit()`.\n- enable plugin rules which are given :star: in the above table.\n- add `{ecmaVersion: 2019}` and etc into `parserOptions`.\n- add proper globals into `globals`.\n- add this plugin into `plugins`.\n\n## 👫 FAQ\n\n- Q: The `no-missing-import` / `no-missing-require` rules don't work with nested folders in SublimeLinter-eslint\n- A: See [context.getFilename() in rule returns relative path](https://github.com/roadhump/SublimeLinter-eslint#contextgetfilename-in-rule-returns-relative-path) in the SublimeLinter-eslint FAQ.\n\n## 🚥 Semantic Versioning Policy\n\n`eslint-plugin-node` follows [semantic versioning](http://semver.org/) and [ESLint's Semantic Versioning Policy](https://github.com/eslint/eslint#semantic-versioning-policy).\n\n- Patch release (intended to not break your lint build)\n    - A bug fix in a rule that results in it reporting fewer errors.\n    - Improvements to documentation.\n    - Non-user-facing changes such as refactoring code, adding, deleting, or modifying tests, and increasing test coverage.\n    - Re-releasing after a failed release (i.e., publishing a release that doesn't work for anyone).\n- Minor release (might break your lint build)\n    - A bug fix in a rule that results in it reporting more errors.\n    - A new rule is created.\n    - A new option to an existing rule is created.\n    - An existing rule is deprecated.\n- Major release (likely to break your lint build)\n    - A support for old Node version is dropped.\n    - A support for old ESLint version is dropped.\n    - An existing rule is changed in it reporting more errors.\n    - An existing rule is removed.\n    - An existing option of a rule is removed.\n    - An existing config is updated.\n\n## 📰 Changelog\n\n- [GitHub Releases](https://github.com/mysticatea/eslint-plugin-node/releases)\n\n## ❤️ Contributing\n\nWelcome contributing!\n\nPlease use GitHub's Issues/PRs.\n\n### Development Tools\n\n- `npm test` runs tests and measures coverage.\n- `npm run coverage` shows the coverage result of `npm test` command.\n- `npm run clean` removes the coverage result of `npm test` command.\n","funding_links":["https://github.com/sponsors/mysticatea"],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmysticatea%2Feslint-plugin-node","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmysticatea%2Feslint-plugin-node","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmysticatea%2Feslint-plugin-node/lists"}