82 lines
2.1 KiB
Markdown
82 lines
2.1 KiB
Markdown
|
|
# import/enforce-node-protocol-usage
|
||
|
|
|
||
|
|
🔧 This rule is automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/latest/user-guide/command-line-interface#--fix).
|
||
|
|
|
||
|
|
<!-- end auto-generated rule header -->
|
||
|
|
|
||
|
|
Enforce either using, or omitting, the `node:` protocol when importing Node.js builtin modules.
|
||
|
|
|
||
|
|
## Rule Details
|
||
|
|
|
||
|
|
This rule enforces that builtins node imports are using, or omitting, the `node:` protocol.
|
||
|
|
|
||
|
|
Determining whether a specifier is a core module depends on the node version being used to run `eslint`.
|
||
|
|
This version can be specified in the configuration with the [`import/node-version` setting](../../README.md#importnode-version).
|
||
|
|
|
||
|
|
Reasons to prefer using the protocol include:
|
||
|
|
|
||
|
|
- the code is more explicitly and clearly referencing a Node.js built-in module
|
||
|
|
|
||
|
|
Reasons to prefer omitting the protocol include:
|
||
|
|
|
||
|
|
- some tools don't support the `node:` protocol
|
||
|
|
- the code is more portable, because import maps and automatic polyfilling can be used
|
||
|
|
|
||
|
|
## Options
|
||
|
|
|
||
|
|
The rule requires a single string option which may be one of:
|
||
|
|
|
||
|
|
- `'always'` - enforces that builtins node imports are using the `node:` protocol.
|
||
|
|
- `'never'` - enforces that builtins node imports are not using the `node:` protocol.
|
||
|
|
|
||
|
|
## Examples
|
||
|
|
|
||
|
|
### `'always'`
|
||
|
|
|
||
|
|
❌ Invalid
|
||
|
|
|
||
|
|
```js
|
||
|
|
import fs from 'fs';
|
||
|
|
export { promises } from 'fs';
|
||
|
|
// require
|
||
|
|
const fs = require('fs/promises');
|
||
|
|
```
|
||
|
|
|
||
|
|
✅ Valid
|
||
|
|
|
||
|
|
```js
|
||
|
|
import fs from 'node:fs';
|
||
|
|
export { promises } from 'node:fs';
|
||
|
|
import * as test from 'node:test';
|
||
|
|
// require
|
||
|
|
const fs = require('node:fs/promises');
|
||
|
|
```
|
||
|
|
|
||
|
|
### `'never'`
|
||
|
|
|
||
|
|
❌ Invalid
|
||
|
|
|
||
|
|
```js
|
||
|
|
import fs from 'node:fs';
|
||
|
|
export { promises } from 'node:fs';
|
||
|
|
// require
|
||
|
|
const fs = require('node:fs/promises');
|
||
|
|
```
|
||
|
|
|
||
|
|
✅ Valid
|
||
|
|
|
||
|
|
```js
|
||
|
|
import fs from 'fs';
|
||
|
|
export { promises } from 'fs';
|
||
|
|
|
||
|
|
// require
|
||
|
|
const fs = require('fs/promises');
|
||
|
|
|
||
|
|
// This rule will not enforce not using `node:` protocol when the module is only available under the `node:` protocol.
|
||
|
|
import * as test from 'node:test';
|
||
|
|
```
|
||
|
|
|
||
|
|
## When Not To Use It
|
||
|
|
|
||
|
|
If you don't want to consistently enforce using, or omitting, the `node:` protocol when importing Node.js builtin modules.
|