スクリプトがNode.jsで実行されているかどうかを確認するにはどうすればいいですか? 質問する

スクリプトがNode.jsで実行されているかどうかを確認するにはどうすればいいですか? 質問する

Node.js スクリプトから必要なスクリプトがあり、JavaScript エンジンに依存しないようにしたいと考えています。

たとえば、exports.x = y;Node.js で実行されている場合にのみ実行したいのですが、このテストを実行するにはどうすればよいですか?


この質問を投稿したとき、Node.jsモジュール機能が以下に基づいていることを知りませんでした。コモンJS

私が挙げた具体的な例の場合、より正確な質問は次のようになります。

スクリプトは、CommonJS モジュールとして要求されているかどうかをどのように判断できますか?

ベストアンサー1

すべての Web サイトが同じ変数を簡単に宣言できるため、Node.js で実行されていることを検出する信頼できる方法はありませんが、windowデフォルトでは Node.js にオブジェクトがないため、逆にブラウザー内で実行されているかどうかを確認することはできます。

これは、ブラウザと Node.js の両方で動作するライブラリに使用するものです。

if (typeof window === 'undefined') {
    exports.foo = {};

} else {
    window.foo = {};
}

Node.jsで定義されている場合は爆発する可能性がありますwindowが、良いvarオブジェクトのプロパティを明示的に省略または設定する必要があるため、誰かがこれを行う理由はありませんglobal

編集

スクリプトが CommonJS モジュールとして要求されているかどうかを検出するのも、簡単ではありません。CommonJS が指定しているのは、A: モジュールは関数の呼び出しによってインクルードされrequire、B: モジュールはオブジェクトのプロパティによってエクスポートされる、という点だけですexports。これをどのように実装するかは、基盤となるシステムに委ねられています。Node.js は、モジュールのコンテンツを匿名関数でラップします。

function (exports, require, module, __filename, __dirname) { 

見る:https://github.com/ry/node/blob/master/src/node.js#L325

しかししない何か奇妙な方法でそれを検出しようとするのarguments.callee.toString()ではなく、ブラウザをチェックする上記のサンプル コードを使用してください。Node.js ははるかにクリーンな環境なので、windowそこで宣言される可能性は低いです。

おすすめ記事