disallow deprecated APIs
- ⭐️ This rule is included in
plugin:node/recommended
preset.
Node has many deprecated API. The community is going to remove those API from Node in future, so we should not use those.
Examples of 👎 incorrect code for this rule:
/*eslint node/no-deprecated-api: "error" */
var fs = require("fs");
fs.exists("./foo.js", function() {}); /*ERROR: 'fs.exists' was deprecated since v4. Use 'fs.stat()' or 'fs.access()' instead.*/
// Also, it can report the following patterns.
var exists = require("fs").exists; /*ERROR: 'fs.exists' was deprecated since v4. Use 'fs.stat()' or 'fs.access()' instead.*/
const {exists} = require("fs"); /*ERROR: 'fs.exists' was deprecated since v4. Use 'fs.stat()' or 'fs.access()' instead.*/
// And other deprecated API below.
This rule reports the following deprecated API.
- _linklist
- _stream_wrap
- async_hooks
- buffer
- Buffer constructors (Use safe-buffer module for
Node@<4.5.0
) - SlowBuffer class
- Buffer constructors (Use safe-buffer module for
- constants (undocumented)
- crypto
- _toBuf
Credentials
(undocumented)- DEFAULT_ENCODING
- createCredentials
- createCipher
- createDecipher
- fips
- prng
- pseudoRandomBytes
- rng
- domain
- events
- freelist (undocumented)
- fs
SyncWriteStream
(undocumented)- exists
- lchmod
- lchmodSync
- globals
- http
- module
- createRequireFromPath
requireRepl
(undocumented)- _debug
- net
- os
tmpDir
(undocumented)getNetworkInterfaces
(undocumented)
- path
- process
EventEmitter
(undocumented)assert
(undocumented)- binding
- punycode
- readline
codePointAt
(undocumented)getStringWidth
(undocumented)isFullWidthCodePoint
(undocumented)stripVTControlCharacters
(undocumented)
- repl
- sys
- timers
enroll
(undocumented)unenroll
(undocumented)
- tls
- CleartextStream (this class was removed on v0.11.3, but never deprecated in documents)
- CryptoStream
- SecurePair
convertNPNProtocols
(undocumented)- createSecurePair
- parseCertString
- tty
- url
- util
- vm
⚠️ Note that userland modules don't hide core modules. For example,require("punycode")
still imports the deprecated core module even if you executednpm install punycode
. Userequire("punycode/")
to import userland modules rather than core modules.
This rule reads the [engines] field of package.json
to detect which Node.js versions your module is supporting.
I recommend the use of the [engines] field because it's the official way that indicates which Node.js versions your module is supporting.
For example of package.json
:
{
"name": "your-module",
"version": "1.0.0",
"engines": {
"node": ">=8.0.0"
}
}
If you omit the [engines] field, this rule chooses >=8.0.0
as the configured Node.js version since 8
is the minimum version the community is maintaining (see also Node.js Release Working Group).
This rule has 3 options.
{
"rules": {
"node/no-deprecated-api": ["error", {
"version": ">=8.0.0",
"ignoreModuleItems": [],
"ignoreGlobalItems": []
}]
}
}
As mentioned above, this rule reads the [engines] field of package.json
.
But, you can overwrite the version by version
option.
The version
option accepts the valid version range of node-semver
.
This is the array of module names and module's member names. Default is an empty array.
This rule ignores APIs that ignoreModuleItems
includes.
This option can include the following values:
_linklist
_stream_wrap
async_hooks.currentId
async_hooks.triggerId
buffer.Buffer()
new buffer.Buffer()
buffer.SlowBuffer
constants
crypto._toBuf
crypto.Credentials
crypto.DEFAULT_ENCODING
crypto.createCipher
crypto.createCredentials
crypto.createDecipher
crypto.fips
crypto.prng
crypto.pseudoRandomBytes
crypto.rng
domain
events.EventEmitter.listenerCount
events.listenerCount
freelist
fs.SyncWriteStream
fs.exists
fs.lchmod
fs.lchmodSync
http.createClient
module.Module.createRequireFromPath
module.createRequireFromPath
module.Module.requireRepl
module.requireRepl
module.Module._debug
module._debug
net._setSimultaneousAccepts
os.tmpDir
path._makeLong
process.EventEmitter
process.assert
process.binding
process.env.NODE_REPL_HISTORY_FILE
process.report.triggerReport
punycode
readline.codePointAt
readline.getStringWidth
readline.isFullWidthCodePoint
readline.stripVTControlCharacters
sys
timers.enroll
timers.unenroll
tls.CleartextStream
tls.CryptoStream
tls.SecurePair
tls.convertNPNProtocols
tls.createSecurePair
tls.parseCertString
tty.setRawMode
url.parse
url.resolve
util.debug
util.error
util.isArray
util.isBoolean
util.isBuffer
util.isDate
util.isError
util.isFunction
util.isNull
util.isNullOrUndefined
util.isNumber
util.isObject
util.isPrimitive
util.isRegExp
util.isString
util.isSymbol
util.isUndefined
util.log
util.print
util.pump
util.puts
util._extend
vm.runInDebugContext
Examples of 👍 correct code for the {"ignoreModuleItems": ["new buffer.Buffer()"]}
:
/*eslint node/no-deprecated-api: [error, {ignoreModuleItems: ["new buffer.Buffer()"]}] */
const buffer = require("buffer")
const data = new buffer.Buffer(10) // OK since it's in ignoreModuleItems.
This is the array of global variable names and global variable's member names. Default is an empty array.
This rule ignores APIs that ignoreGlobalItems
includes.
This option can include the following values:
Buffer()
new Buffer()
COUNTER_NET_SERVER_CONNECTION
COUNTER_NET_SERVER_CONNECTION_CLOSE
COUNTER_HTTP_SERVER_REQUEST
COUNTER_HTTP_SERVER_RESPONSE
COUNTER_HTTP_CLIENT_REQUEST
COUNTER_HTTP_CLIENT_RESPONSE
Intl.v8BreakIterator
require.extensions
process.EventEmitter
process.assert
process.binding
process.env.NODE_REPL_HISTORY_FILE
Examples of 👍 correct code for the {"ignoreGlobalItems": ["new Buffer()"]}
:
/*eslint node/no-deprecated-api: [error, {ignoreGlobalItems: ["new Buffer()"]}] */
const data = new Buffer(10) // OK since it's in ignoreGlobalItems.
This rule cannot report the following cases:
- async_hooks
- buffer
- cluster
- crypto
- http
- net
- repl
replServer.convertToContext
(undocumented)- replServer.turnOffEditorMode
- replServer.memory
- fs
fs.truncate()
andfs.truncateSync()
usage with a file descriptor has been deprecated.
- url
url.format()
with legacyurlObject
has been deprecated.
require(foo).aDeprecatedProperty;
require("http")[A_DEPRECATED_PROPERTY]();
var obj = {
Buffer: require("buffer").Buffer
};
new obj.Buffer(); /* missing. */
var obj = {};
obj.Buffer = require("buffer").Buffer
new obj.Buffer(); /* missing. */
(function(Buffer) {
new Buffer(); /* missing. */
})(require("buffer").Buffer);
var Buffer = require("buffer").Buffer;
Buffer = require("another-buffer");
new Buffer(); /*ERROR: 'buffer.Buffer' constructor was deprecated.*/