ろぼいんブログ

Node.jsにESMファイルが直接実行されたかを確認できる機能が追加

Node.js v24.2.0のリリースノートのスクリーンショット
画像:Node.js v24.2.0のリリースノート

これまで、Pythonの__name__ == "__main__"のように、Node.jsでCommonJSのスクリプトが直接実行されたのかモジュールとして読み込まれたかを判定するには、require.main === moduleが使われてきました。

if (require.main === module) {
// 直接実行されたときにだけ実行するコード
}

一方で、ESModulesの場合は、次のように記述できました。

import url from "url";
const self = url.fileURLToPath(import.meta.url);
if (process.argv [1] === self) {
// 直接実行されたときにだけ実行するコード
}

これは、実行されたファイルのパスと自身のパスを比較することで、直接実行されたかを判定するという手法ですが、判定のためにライブラリーのインポートが必要になるなどの問題点がありました。

広告

Node.js v24.2.0では、より簡単に判定できるimport.meta.mainが追加されました。Node.js v24.2.0以降では、次のように簡単に判定できます。

if (import.meta.main) {
// 直接実行されたときにだけ実行するコード
}

古いバージョンのNode.jsではこの新しい手法を使えませんが、Node.js v24.2.0以降を前提としたプロジェクトでは、 import.meta.main を採用するのがよいでしょう。

参考リンク

記事をシェア

Xに共有するBlueskyに共有するMisskeyに共有するLINEに共有するThreadsに共有する

フォローして最新情報を入手

Googleの優先ソースに追加すると、このサイトの記事をGoogleで見つけやすくなります。また、ぜひXやRSSフィードもフォローしてください。

Googleの優先ソースとして追加するGoogleの優先ソースとして追加するXのロゴ
著者のアイコン画像

生まれた時から、母国語よりも先にJavaScriptを使っていました。ネットの海のどこにもいなくてどこにでもいます。

Webフロントエンドプログラマーとして、TypeScriptを用いたWebアプリやブラウザー拡張機能を制作。Xのシャドウバン検知ツール「Shadowban Scanner」やリンクカード復活ツール「Restore Link Card」を公開し、国内外のメディアで紹介されました。iGEM 2023ではJapan-UnitedチームのWikiを制作してGrand Prizeの獲得に貢献。ブログではXやSNSの最新ニュース、不具合の検証と対処法、フロントエンド開発の知見を発信しています。