検索

Node.js は、サーバー上で JavaScript を実行できる Chrome V8 エンジンに基づくプログラミング言語です。モジュールとパッケージを使用して、プログラムを簡単に編成し、依存関係を管理できます。このうち、module.exportsexports はモジュール化においてよく使われる概念であり、この記事では Node.js での使い方を紹介します。

module.exports と exports の関係

Node.js では、各ファイルは独立したモジュールです。ファイル内の変数や関数を他のモジュールで使用したい場合は、エクスポートします。変数 module.exportsexports の両方をエクスポートできます。

Node.js では、各モジュールに module オブジェクトがあり、このオブジェクトには exports 属性などのモジュール関連情報が含まれます。 exports エクスポートする変数または関数をこの属性にマウントし、require() 関数を通じて外部からモジュールを参照し、エクスポートされた変数と関数を呼び出します。

デフォルトでは、exportsmodule.exports の参照を指すため、exports および module.exportsモジュールをエクスポートできますが、この 2 つの間のポインティング関係は常に同じであるとは限らないため、場合によっては exports の代わりに module.exports を使用する必要があることに注意してください。

exports と module.exports の比較

exports を使用してオブジェクトをエクスポートする場合、実際には exports に属性を追加し、値を割り当てます。 。例:

// add.js
exports.add = function (a, b) {
  return a + b;
}

上記のコードでは、exports を使用して add() メソッドをエクスポートします。次のコードを実行するのと同じです:

exports.add = function (a, b) {
  return a + b;
}

module.exports = exports; // exports被默认指向module.exports

次に例を見てみましょう:

// math.js
exports.add = function (a, b) {
  return a + b;
};

exports.sub = function (a, b) {
  return a - b;
};

// app.js
const math = require('./math');
console.log(math.add(1, 1)); // 2
console.log(math.sub(1, 1)); // 0

require() を通じて math モジュールを参照します。関数を実行し、そのエクスポートされたメソッドを呼び出すと、結果が正しく出力されます。なぜそれが正しいのでしょうか?

#exports がデフォルトで module.exports を指すことはわかっていますが、exports を新しいオブジェクト に直接指すと、 module .exports の指向関係が変更されました。 Node.js がモジュールをロードすると、実際には exports オブジェクトではなく module.exports オブジェクトが返されるため、 exports を新しいオブジェクトにポイントした後、次に、新しいオブジェクトを module.exports の値として使用します。これが実際のエクスポート操作です。

exports = {
  add: function (a, b) {
    return a + b;
  },
  sub: function (a, b) {
    return a - b;
  },
}

module.exports = exports;

注:

exports の属性を再割り当てするだけでは、その属性と module.exports の間のポインティング関係は変わりません。

例:

// multiply.js
exports = {
  mul: function (a, b) {
    return a * b;
  }
}

// app.js
const multiply = require('./multiply');
console.log(multiply.mul(2, 5)); // TypeError: multiply.mul is not a function

上記のコードでは、

exports は新しいオブジェクトを指しますが、そのプロパティは割り当てられていないため、エクスポートされた値は unknown になります。 なので、呼び出し時に TypeError が発生します。

エクスポートと module.exports の使用シナリオ

ほとんどの場合、

exports を直接使用してモジュールをエクスポートできます。ただし、関数やオブジェクトを exports にマウントするのではなく、モジュールから直接エクスポートする必要がある場合があります。この場合は、module.exports を使用する必要があります。

例:

// foo.js
module.exports = function () {
  console.log('Hello World!')
}

// app.js
const foo = require('./foo');
foo(); // Hello World!

上記のコードでは、関数を

module.exports に直接割り当てると、実際にはその関数がモジュール全体のエクスポート オブジェクトとして使用されます。

概要

exports と module.exports は、Node.js でモジュールをエクスポートするために使用される変数です。これらは、使用中にモジュールの変数または関数を外部使用に公開できます。そのエクスポートはデフォルトで module.exports を指しますが、その関係は常に同じオブジェクトを指すわけではないため、場合によっては、exports の代わりに module.exports を使用する必要があります。モジュールをエクスポートするために、exports と module.exports を使用することを選択する場合は、実際の状況に応じて選択できます。

以上がnodejsエクスポートの使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Reactのエコシステムのサイズ:複雑な風景をナビゲートしますReactのエコシステムのサイズ:複雑な風景をナビゲートしますApr 28, 2025 am 12:21 AM

tonavigatereAct'somplexEcosystemively、理解を理解し、認識していることを認識していることを認識しているandweakness、およびIntegreatemtoemtoemtoemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemtemotereconceptate、その後、勾配内で測定する

どのようにReactがキーを使用してリスト項目を効率的に識別しますどのようにReactがキーを使用してリスト項目を効率的に識別しますApr 28, 2025 am 12:20 AM

RactuseSeSeSeSeSeSeSeSpiffictifideidifiedItemsbyprovidingastableidentitytoeeedelement.1)keysallowReactTotTotTotTotTotTotTotTotTotTotTotTotTotTotTotRACKESOUTRE-RENDERINGTHEENTERELIST.2)chookiniqueandstablekeys、avolididingArrayIndi​​ces.3)reforceAsificlySificlySiflovedobrovesiondanc

Reactにおける重要な問題のデバッグ:問題の特定と解決Reactにおける重要な問題のデバッグ:問題の特定と解決Apr 28, 2025 am 12:17 AM

KeysinReactarecrucialforoptimizingTherenderingProcessandDynamicListseffective.tospotandfixkey-relatedissues:1)adduniquekeystolistiTemstoavoidsissusisus、2)useuniqueidideididifiersfromdateadceSofofordiceys、3)

Reactの一方向データバインディング:予測可能なデータフローの確保Reactの一方向データバインディング:予測可能なデータフローの確保Apr 28, 2025 am 12:05 AM

Reactの一元配置データバインディングにより、データが親コンポーネントから子コンポーネントに流れることが保証されます。 1)データは単一に流れ、親コンポーネントの状態の変化は子コンポーネントに渡すことができますが、子コンポーネントは親コンポーネントの状態に直接影響することはできません。 2)この方法により、データフローの予測可能性が向上し、デバッグとテストが簡素化されます。 3)制御されたコンポーネントとコンテキストを使用することにより、一方向のデータストリームを維持しながら、ユーザーの相互作用とコンポーネント間通信を処理できます。

Reactコンポーネントでキーを選択して管理するためのベストプラクティスReactコンポーネントでキーを選択して管理するためのベストプラクティスApr 28, 2025 am 12:01 AM

keysinReactarecrucialforeffiencedomupdatessandRecOnciliation.1)選択可能でユニークな、そして類似のフルキーなど、Itemids.2)fornestedLists、useuniquekeysateachlevel.3)

ReactアプリケーションのuseState()を使用してパフォーマンスを最適化しますReactアプリケーションのuseState()を使用してパフォーマンスを最適化しますApr 27, 2025 am 12:22 AM

useState()uscrucialforoptimizingRectperformanceduetuitsoitsimpactonre-rendersandupdates.tooptimize:1)useusecallbacktomoize funtionsandpreventunnederireRenders.2)

コンテキストとuseState()を使用してコンポーネント間で状態を共有するコンテキストとuseState()を使用してコンポーネント間で状態を共有するApr 27, 2025 am 12:19 AM

コンテキストとユーザーを使用して、大規模なReactアプリケーションで州の管理を簡素化できるため、状態を共有します。 1)プロップドリルを減らす、2)より明確なコード、3)グローバルな状態を管理しやすい。ただし、パフォーマンスのオーバーヘッドと複雑さのデバッグに注意してください。コンテキストと最適化技術の合理的な使用は、アプリケーションの効率と保守性を向上させることができます。

Reactの仮想DOMアップデートに対する誤ったキーの影響Reactの仮想DOMアップデートに対する誤ったキーの影響Apr 27, 2025 am 12:19 AM

誤ったキーを使用すると、Reactアプリケーションでパフォーマンスの問題や予期しない動作を引き起こす可能性があります。 1)キーはリスト項目の一意の識別子であり、Virtual Domを効率的にReactの更新を支援します。 2)同じまたは非ユニークなキーを使用すると、リスト項目が再注文され、コンポーネント状態が失われます。 3)キーとして安定した一意の識別子を使用すると、パフォーマンスを最適化し、完全な再レンダリングを回避できます。 4)ESLINTなどのツールを使用して、キーの正しさを確認します。キーを適切に使用すると、効率的で信頼性の高い反応アプリケーションが保証されます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン