diff --git a/README.md b/README.md index f8525b8b..63ba54ed 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Additional ESLint's rules for Node.js $ npm install --save-dev eslint eslint-plugin-node ``` -- Requires Node.js `>=8.10.0` +- Requires Node.js `^10.0.0 || ^12.0.0 || >= 14.0.0` - Requires ESLint `>=5.16.0` **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. @@ -23,25 +23,22 @@ $ npm install --save-dev eslint eslint-plugin-node ```jsonc { - "extends": [ - "eslint:recommended", - "plugin:node/recommended" - ], - "parserOptions": { - // Only ESLint 6.2.0 and later support ES2020. - "ecmaVersion": 2020 - }, - "rules": { - "node/exports-style": ["error", "module.exports"], - "node/file-extension-in-import": ["error", "always"], - "node/prefer-global/buffer": ["error", "always"], - "node/prefer-global/console": ["error", "always"], - "node/prefer-global/process": ["error", "always"], - "node/prefer-global/url-search-params": ["error", "always"], - "node/prefer-global/url": ["error", "always"], - "node/prefer-promises/dns": "error", - "node/prefer-promises/fs": "error" - } + "extends": ["eslint:recommended", "plugin:node/recommended"], + "parserOptions": { + // Only ESLint 6.2.0 and later support ES2020. + "ecmaVersion": 2020 + }, + "rules": { + "node/exports-style": ["error", "module.exports"], + "node/file-extension-in-import": ["error", "always"], + "node/prefer-global/buffer": ["error", "always"], + "node/prefer-global/console": ["error", "always"], + "node/prefer-global/process": ["error", "always"], + "node/prefer-global/url-search-params": ["error", "always"], + "node/prefer-global/url": ["error", "always"], + "node/prefer-promises/dns": "error", + "node/prefer-promises/fs": "error" + } } ``` @@ -49,12 +46,12 @@ $ npm install --save-dev eslint eslint-plugin-node ```json { - "name": "your-module", - "version": "1.0.0", - "type": "commonjs", - "engines": { - "node": ">=8.10.0" - } + "name": "your-module", + "version": "1.0.0", + "type": "commonjs", + "engines": { + "node": ">=10.0.0" + } } ``` @@ -64,65 +61,66 @@ $ npm install --save-dev eslint eslint-plugin-node - ✒️ - the mark of fixable rules. + ### Possible Errors -| Rule ID | Description | | -|:--------|:------------|:--:| -| [node/handle-callback-err](./docs/rules/handle-callback-err.md) | require error handling in callbacks | | -| [node/no-callback-literal](./docs/rules/no-callback-literal.md) | ensure Node.js-style error-first callback pattern is followed | | -| [node/no-exports-assign](./docs/rules/no-exports-assign.md) | disallow the assignment to `exports` | ⭐️ | -| [node/no-extraneous-import](./docs/rules/no-extraneous-import.md) | disallow `import` declarations which import extraneous modules | ⭐️ | -| [node/no-extraneous-require](./docs/rules/no-extraneous-require.md) | disallow `require()` expressions which import extraneous modules | ⭐️ | -| [node/no-missing-import](./docs/rules/no-missing-import.md) | disallow `import` declarations which import non-existence modules | ⭐️ | -| [node/no-missing-require](./docs/rules/no-missing-require.md) | disallow `require()` expressions which import non-existence modules | ⭐️ | -| [node/no-new-require](./docs/rules/no-new-require.md) | disallow `new` operators with calls to `require` | | -| [node/no-path-concat](./docs/rules/no-path-concat.md) | disallow string concatenation with `__dirname` and `__filename` | | -| [node/no-process-exit](./docs/rules/no-process-exit.md) | disallow the use of `process.exit()` | | -| [node/no-unpublished-bin](./docs/rules/no-unpublished-bin.md) | disallow `bin` files that npm ignores | ⭐️ | -| [node/no-unpublished-import](./docs/rules/no-unpublished-import.md) | disallow `import` declarations which import private modules | ⭐️ | -| [node/no-unpublished-require](./docs/rules/no-unpublished-require.md) | disallow `require()` expressions which import private modules | ⭐️ | -| [node/no-unsupported-features/es-builtins](./docs/rules/no-unsupported-features/es-builtins.md) | disallow unsupported ECMAScript built-ins on the specified version | ⭐️ | -| [node/no-unsupported-features/es-syntax](./docs/rules/no-unsupported-features/es-syntax.md) | disallow unsupported ECMAScript syntax on the specified version | ⭐️ | -| [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 | ⭐️ | -| [node/process-exit-as-throw](./docs/rules/process-exit-as-throw.md) | make `process.exit()` expressions the same code path as `throw` | ⭐️ | -| [node/shebang](./docs/rules/shebang.md) | suggest correct usage of shebang | ⭐️✒️ | +| Rule ID | Description | | +| :-------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------ | :---: | +| [node/handle-callback-err](./docs/rules/handle-callback-err.md) | require error handling in callbacks | | +| [node/no-callback-literal](./docs/rules/no-callback-literal.md) | ensure Node.js-style error-first callback pattern is followed | | +| [node/no-exports-assign](./docs/rules/no-exports-assign.md) | disallow the assignment to `exports` | ⭐️ | +| [node/no-extraneous-import](./docs/rules/no-extraneous-import.md) | disallow `import` declarations which import extraneous modules | ⭐️ | +| [node/no-extraneous-require](./docs/rules/no-extraneous-require.md) | disallow `require()` expressions which import extraneous modules | ⭐️ | +| [node/no-missing-import](./docs/rules/no-missing-import.md) | disallow `import` declarations which import non-existence modules | ⭐️ | +| [node/no-missing-require](./docs/rules/no-missing-require.md) | disallow `require()` expressions which import non-existence modules | ⭐️ | +| [node/no-new-require](./docs/rules/no-new-require.md) | disallow `new` operators with calls to `require` | | +| [node/no-path-concat](./docs/rules/no-path-concat.md) | disallow string concatenation with `__dirname` and `__filename` | | +| [node/no-process-exit](./docs/rules/no-process-exit.md) | disallow the use of `process.exit()` | | +| [node/no-unpublished-bin](./docs/rules/no-unpublished-bin.md) | disallow `bin` files that npm ignores | ⭐️ | +| [node/no-unpublished-import](./docs/rules/no-unpublished-import.md) | disallow `import` declarations which import private modules | ⭐️ | +| [node/no-unpublished-require](./docs/rules/no-unpublished-require.md) | disallow `require()` expressions which import private modules | ⭐️ | +| [node/no-unsupported-features/es-builtins](./docs/rules/no-unsupported-features/es-builtins.md) | disallow unsupported ECMAScript built-ins on the specified version | ⭐️ | +| [node/no-unsupported-features/es-syntax](./docs/rules/no-unsupported-features/es-syntax.md) | disallow unsupported ECMAScript syntax on the specified version | ⭐️ | +| [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 | ⭐️ | +| [node/process-exit-as-throw](./docs/rules/process-exit-as-throw.md) | make `process.exit()` expressions the same code path as `throw` | ⭐️ | +| [node/shebang](./docs/rules/shebang.md) | suggest correct usage of shebang | ⭐️✒️ | ### Best Practices -| Rule ID | Description | | -|:--------|:------------|:--:| +| Rule ID | Description | | +| :---------------------------------------------------------- | :----------------------- | :-: | | [node/no-deprecated-api](./docs/rules/no-deprecated-api.md) | disallow deprecated APIs | ⭐️ | ### Stylistic Issues -| Rule ID | Description | | -|:--------|:------------|:--:| -| [node/callback-return](./docs/rules/callback-return.md) | require `return` statements after callbacks | | -| [node/exports-style](./docs/rules/exports-style.md) | enforce either `module.exports` or `exports` | | -| [node/file-extension-in-import](./docs/rules/file-extension-in-import.md) | enforce the style of file extensions in `import` declarations | ✒️ | -| [node/global-require](./docs/rules/global-require.md) | require `require()` calls to be placed at top-level module scope | | -| [node/no-mixed-requires](./docs/rules/no-mixed-requires.md) | disallow `require` calls to be mixed with regular variable declarations | | -| [node/no-process-env](./docs/rules/no-process-env.md) | disallow the use of `process.env` | | -| [node/no-restricted-import](./docs/rules/no-restricted-import.md) | disallow specified modules when loaded by `import` declarations | | -| [node/no-restricted-require](./docs/rules/no-restricted-require.md) | disallow specified modules when loaded by `require` | | -| [node/no-sync](./docs/rules/no-sync.md) | disallow synchronous methods | | -| [node/prefer-global/buffer](./docs/rules/prefer-global/buffer.md) | enforce either `Buffer` or `require("buffer").Buffer` | | -| [node/prefer-global/console](./docs/rules/prefer-global/console.md) | enforce either `console` or `require("console")` | | -| [node/prefer-global/process](./docs/rules/prefer-global/process.md) | enforce either `process` or `require("process")` | | -| [node/prefer-global/text-decoder](./docs/rules/prefer-global/text-decoder.md) | enforce either `TextDecoder` or `require("util").TextDecoder` | | -| [node/prefer-global/text-encoder](./docs/rules/prefer-global/text-encoder.md) | enforce either `TextEncoder` or `require("util").TextEncoder` | | -| [node/prefer-global/url-search-params](./docs/rules/prefer-global/url-search-params.md) | enforce either `URLSearchParams` or `require("url").URLSearchParams` | | -| [node/prefer-global/url](./docs/rules/prefer-global/url.md) | enforce either `URL` or `require("url").URL` | | -| [node/prefer-promises/dns](./docs/rules/prefer-promises/dns.md) | enforce `require("dns").promises` | | -| [node/prefer-promises/fs](./docs/rules/prefer-promises/fs.md) | enforce `require("fs").promises` | | +| Rule ID | Description | | +| :-------------------------------------------------------------------------------------- | :---------------------------------------------------------------------- | :-: | +| [node/callback-return](./docs/rules/callback-return.md) | require `return` statements after callbacks | | +| [node/exports-style](./docs/rules/exports-style.md) | enforce either `module.exports` or `exports` | | +| [node/file-extension-in-import](./docs/rules/file-extension-in-import.md) | enforce the style of file extensions in `import` declarations | ✒️ | +| [node/global-require](./docs/rules/global-require.md) | require `require()` calls to be placed at top-level module scope | | +| [node/no-mixed-requires](./docs/rules/no-mixed-requires.md) | disallow `require` calls to be mixed with regular variable declarations | | +| [node/no-process-env](./docs/rules/no-process-env.md) | disallow the use of `process.env` | | +| [node/no-restricted-import](./docs/rules/no-restricted-import.md) | disallow specified modules when loaded by `import` declarations | | +| [node/no-restricted-require](./docs/rules/no-restricted-require.md) | disallow specified modules when loaded by `require` | | +| [node/no-sync](./docs/rules/no-sync.md) | disallow synchronous methods | | +| [node/prefer-global/buffer](./docs/rules/prefer-global/buffer.md) | enforce either `Buffer` or `require("buffer").Buffer` | | +| [node/prefer-global/console](./docs/rules/prefer-global/console.md) | enforce either `console` or `require("console")` | | +| [node/prefer-global/process](./docs/rules/prefer-global/process.md) | enforce either `process` or `require("process")` | | +| [node/prefer-global/text-decoder](./docs/rules/prefer-global/text-decoder.md) | enforce either `TextDecoder` or `require("util").TextDecoder` | | +| [node/prefer-global/text-encoder](./docs/rules/prefer-global/text-encoder.md) | enforce either `TextEncoder` or `require("util").TextEncoder` | | +| [node/prefer-global/url-search-params](./docs/rules/prefer-global/url-search-params.md) | enforce either `URLSearchParams` or `require("url").URLSearchParams` | | +| [node/prefer-global/url](./docs/rules/prefer-global/url.md) | enforce either `URL` or `require("url").URL` | | +| [node/prefer-promises/dns](./docs/rules/prefer-promises/dns.md) | enforce `require("dns").promises` | | +| [node/prefer-promises/fs](./docs/rules/prefer-promises/fs.md) | enforce `require("fs").promises` | | ### Deprecated rules These rules have been deprecated in accordance with the [deprecation policy](https://eslint.org/docs/user-guide/rule-deprecation), and replaced by newer rules: -| Rule ID | Replaced by | -|:--------|:------------| -| [node/no-hide-core-modules](./docs/rules/no-hide-core-modules.md) | (nothing) | +| Rule ID | Replaced by | +| :---------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [node/no-hide-core-modules](./docs/rules/no-hide-core-modules.md) | (nothing) | | [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) | @@ -153,22 +151,22 @@ Those preset config: `eslint-plugin-node` follows [semantic versioning](http://semver.org/) and [ESLint's Semantic Versioning Policy](https://github.com/eslint/eslint#semantic-versioning-policy). - Patch release (intended to not break your lint build) - - A bug fix in a rule that results in it reporting fewer errors. - - Improvements to documentation. - - Non-user-facing changes such as refactoring code, adding, deleting, or modifying tests, and increasing test coverage. - - Re-releasing after a failed release (i.e., publishing a release that doesn't work for anyone). + - A bug fix in a rule that results in it reporting fewer errors. + - Improvements to documentation. + - Non-user-facing changes such as refactoring code, adding, deleting, or modifying tests, and increasing test coverage. + - Re-releasing after a failed release (i.e., publishing a release that doesn't work for anyone). - Minor release (might break your lint build) - - A bug fix in a rule that results in it reporting more errors. - - A new rule is created. - - A new option to an existing rule is created. - - An existing rule is deprecated. + - A bug fix in a rule that results in it reporting more errors. + - A new rule is created. + - A new option to an existing rule is created. + - An existing rule is deprecated. - Major release (likely to break your lint build) - - A support for old Node version is dropped. - - A support for old ESLint version is dropped. - - An existing rule is changed in it reporting more errors. - - An existing rule is removed. - - An existing option of a rule is removed. - - An existing config is updated. + - A support for old Node version is dropped. + - A support for old ESLint version is dropped. + - An existing rule is changed in it reporting more errors. + - An existing rule is removed. + - An existing option of a rule is removed. + - An existing config is updated. ## 📰 Changelog