🦔
import { promises as fs } from "fs"; を禁止するESLintルール
少し前にNode.js v12がEoLを迎えましたね。つまりライブラリ開発者は堂々とv12のサポートを切ってv14の機能を使うことができるようになったということです。
v14から使えるようになった機能の一つとしてfs/promsies
エイリアスがあります。今までは
import { promsies as fs } from "node:fs";
のようにしてfsの非同期APIを使っていましたが、Node.js v14からは
import fs from "node:fs/promises";
のようにして直接非同期APIをimport/requireできます。
参考:
どちらの書き方でも同じ意味なのでどっちでも良いのですが、プロジェクト内では統一しておきたいところです。
ということでESLintルールを書きました。めんどくさいのでauto-fixはなしです。
"use strict";
const selector = [
"ImportDeclaration",
"[specifiers.length=1]",
'[source.value="node:fs"]',
">",
"ImportSpecifier:first-child",
'[imported.name="promises"]',
].join("");
const messageId = "prefer-fs-promises";
module.exports = {
meta: {
type: "suggestion",
messages: {
[messageId]:
'Prefer `import fs from "node:fs/promises"` instead of `import { promises as fs } from "fs";`',
},
},
create(context) {
return {
[selector](node) {
context.report({
node,
messageId,
});
},
};
},
};
このルールは自分の関わっているプロジェクトで最低限上手く機能するようになっているので、お好みでselector部分をいじっていい感じにしてください。
Discussion