Docs Menu

require()load() の違い

require()メソッドとload()メソッドでは、機能を追加するためにスクリプトに ファイルとモジュールを含めます。 ただし、 require()load()では動作と可用性が異なります。

mongoshでは、次のタイプのスクリプトを使用できます。

  • mongoshスクリプトは、次のいずれかになります。

    • REPL に直接入力されるコード。

    • mongoshrc.jsファイル。

    • load()メソッドでロードされたコード。

  • Node.js スクリプトは、npm パッケージを含むrequire()で読み込まれた任意のスクリプトです。 これらのスクリプトは常にファイルです。

require()メソッドとload()メソッドは、使用しているスクリプトの種類に応じて可用性が異なります。

  • mongoshスクリプトでは、 require()load()の両方が使用できます。

  • Node.js スクリプトでは、 require()のみが使用できます。

スクリプトのタイプによって、 require()またはload()でファイルパスを指定する方法が決まります。

  • mongoshスクリプトの場合

    • require()は標準の Node.js モジュール解決アルゴリズム を使用します 、shell の現在の作業ディレクトリから起動します。

    • load()は次のいずれかを取ります。

      • 絶対パス、または

      • 相対パス。 相対パスを使用する場合、パスは常に shell の現在の作業ディレクトリに対して相対的として解釈されます。

  • Node.js スクリプトでは、require() は標準の Node.js モジュール解決アルゴリズム を使用します は、require() が呼び出されたファイルから開始します。

Tip

shell の現在の作業ディレクトリを返すには、スクリプトからpwd()メソッドを実行します。

shell の作業ディレクトリを変更するには、スクリプト内でCD()メソッドを使用します。

mongoshスクリプトファイルには、npm パッケージや個別のmongoshスクリプトなどの外部コードをロードできます。

  • 別のmongoshスクリプトからmongoshスクリプトを読み込むには、 __dirname環境変数を使用します。 __dirname環境変数は、実行中のファイルを含むディレクトリの絶対パスを返します。

    別のmongoshスクリプトからtest-suite.jsという名前のmongoshスクリプトを読み込むには、スクリプトに次の行を追加します。

    load(__dirname + '/test-suite.js')

    _dirname変数を使用して絶対パスを指定すると、ロードしている個別のスクリプトが、 mongoshが起動された場所などの外部要因の影響を受けないようになります。

  • mongoshスクリプトから Node.js スクリプトを読み込むには、 require()メソッドを使用します。

    date-fnd をロードするには と呼ばれるmongosh test-suite2.jsスクリプトのモジュール()をスクリプトに追加します。

    const localRequire = require('date-fns').createRequire(__filename);
    const fileExports = localRequire('./test-suite2.js'); }

Node.js モジュールには 2 つのパッケージ化標準があります。

パッケージング標準
require() との連携

CommonJS (CJS)

はい

ECMAScript Module (ES Module)

No

mongoshでは ES モジュールをrequire()できません。 ES モジュールの機能を使用する場合は、代わりに使用できる CommonJS バージョンがあるかどうかを確認してください。 詳しくは、以下を参照してください。

  • mongoshスクリプトはmongosh API を使用できます。

  • Node.js スクリプトはmongosh API にアクセスできません。

たとえば、 dbグローバル変数(現在のデータベースを表示するために使用)はmongoshスクリプト内で使用できます。 Node.js スクリプト内では使用できません。

重要

mongoshスクリプトと Node.js スクリプトは異なる コンテキスト で実行 。それぞれのタイプのスクリプトで同じコマンドを実行すると、異なるデータ型が返されるなど、異なる動作が見られる場合があります。 したがって、Node.js スクリプト内でmongoshコードを実行すると、予期しない結果が生じる可能性があります。

一般に、Node.js スクリプト内に mongosh 固有のコードを保持しないでください。