Node.jsのモジュールシステムを取得

プログラミングの分野では、機能モジュールは、自己完結型ユニットであるプロジェクト間で共有し、再利用することができます。私たちは個人的にこれらの機能を記述することなく、アプリケーションの機能を高めるためにそれを使用することができますので、彼らは、開発者のための生活が容易になります。それはまた、私たちは、デバッグを理解し、維持するためにアプリケーションを容易にするために、コードを整理し、デカップリングすることができます。

この記事では、我々はNode.jsのモジュールを使用する方法を探っていき、エクスポートおよびインポートする方法について説明します。

別のモジュール形式

JavaScriptのの概念がない元々のモジュールをしなかったので、時間をかけて様々な競合フォーマットが行われています。以下は、いくつかのフォーマットで主流となっています。

  • 非同期モジュール定義(AMD)形式で、使用するブラウザ  define機能定義モジュールを。
  • CommonJS(CJS)  のNode.js、使用するためのフォーマット、  require およびmodule.exports 依存関係およびモジュールを定義します。
  •  ESモジュール(ESM)  のフォーマット。ES6(ES2015)は、JavaScriptのモジュールは、ネイティブ形式をサポートし、開始します。これは、使用してexport、公開APIキーエクスポートモジュールを、および使用  import importキーワードを。
  •  System.register  フォーマットはES5 ES6モジュールをサポートするように設計されています。
  •  ユニバーサルモジュール定義(UMD)  のフォーマットは、ブラウザとNode.js.を使用することができます ローダーモジュールは、種々のモジュールに導入する必要がある場合、これは有用です。

この記事は唯一話し合うことに注意CommonJS形式は、それが標準フォーマットでのNode.jsです。あなたが他のフォーマットを学びたいのであれば、私はあなたが読んでお勧めしますこの記事を、著者はSitePointのユルゲン・ヴァン・デ・Moereです。

ロード・モジュール

Node.jsのは、一連の持っている組み込みモジュール、私たちはあなたのコードで使用するためにインストールする必要はありませんが。この目的のために、我々は使用する必要があるrequireキーワードの負荷にモジュールをし、それを変数に割り当てます。このモジュールは、露出の任意のメソッドを呼び出すことができます。

たとえば、ディレクトリの内容を一覧表示するには、使用できるファイルシステムモジュール  の  readdir メソッドを:

const fs = require('fs');
const folderPath = '/home/jim/Desktop/';

fs.readdir(folderPath, (err, files) => {
  files.forEach(file => {
    console.log(file);
  });
});

CommonJSに、モジュールは、外観及び同期処理のためにロードされることに留意されたいです。

作成およびエクスポートモジュール

今、プログラムで使用する他の場所のためのモジュールを作成し、エクスポートする方法での見てみましょう。作成し  user.js たファイルを、および以下の内容を追加します。

const getName = () => {
  return 'Jim';
};

exports.getName = getName;

次に、同じディレクトリを作成し  index.js 、ファイル、次の行を追加します。

const user = require('./user');
console.log(`User: ${user.getName()}`);

このコマンドはnode index.js 、プログラムを実行するには、コンソールで次の出力が表示されるはずです。

User: Jim

ここで何が起こったのか?あなたが見ればuser.jsファイル、あなたは我々が定義されていることに気づくでしょうgetName、その後使用し、機能をexportsそれは他の場所にインポートできるようにキーワードを。次に  index.jsファイルは、我々はこの方法を導入し、それを実行します。また、中にいることに注意してくださいrequire 声明、プラスモジュール名の接頭辞  ./は、ローカル・ファイルであるため、。他には、ファイルの拡張子を追加する必要はありません。

複数の値を導出する方法と

私たちは、複数の方法と値と同じ方法をエクスポートすることができます。

const getName = () => {
  return 'Jim';
};

const getLocation = () => {
  return 'Munich';
};

const dateOfBirth = '12.01.1982';

exports.getName = getName;
exports.getLocation = getLocation;
exports.dob = dateOfBirth;

 index.js ファイル:

const user = require('./user');
console.log(
  `${user.getName()} lives in ${user.getLocation()} and was born on ${user.dob}.`
);

次のように上記のコードは次のとおりです。

Jim lives in Munich and was born on 12.01.1982.

注意、我々は派生dateOfBirth指定された変数名(この場合は、私たちが望む何もすることができますdob)。これは、必ずしも元の変数名と同じではありません。

様々な文法形式

また、最後に、あなたが必ずしもファイルに、メソッドと値の真ん中にエクスポートすることができ、と述べられています。
例えば:

exports.getName = () => {
  return 'Jim';
};

exports.getLocation = () => {
  return 'Munich';
};

exports.dob = '12.01.1982';

また、おかげ分割代入は、必要に応じて、我々は選択的にインポートできます。

const { getName, dob } = require('./user');
console.log(
  `${getName()} was born on ${dob}.`
);

ご想像のとおり、この意志の出力ログ:

Jim was born on 12.01.1982.

エクスポートのデフォルト設定

上記の例では、機能と価値を引き出します。これは、アプリケーション全体がそれを必要とする補助機能のために非常に便利ですが、あなたが唯一のエクスポート時に、単一のオブジェクトモジュールは、一般的に使用されていますmodule.exports

class User {
  constructor(name, age, email) {
    this.name = name;
    this.age = age;
    this.email = email;
  }

  getUserStats() {
    return `
      Name: ${this.name}
      Age: ${this.age}
      Email: ${this.email}
    `;
  }
}

module.exports = User;

 index.jsファイル:

const User = require('./user');
const jim = new User('Jim', 37, '[email protected]');

console.log(jim.getUserStats());

上記のコードの出力ログ:

Name: Jim
Age: 37
Email: [email protected]

 module.exports そして、exportsの違いは何ですか

あなたは、インターネット上で、次の構文を発生することがあります。

module.exports = {
  getName: () => {
    return 'Jim';
  },

  getLocation: () => {
    return 'Munich';
  },

  dob: '12.01.1982',
};

ここでは、に割り当てられたエクスポート機能と値にしたい   :もちろん、これが可能である-プロパティmoduleexports

const { getName, dob } = require('./user');
console.log(
  `${getName()} was born on ${dob}.`
);

次のように出力ログは次のようになります。

Jim was born on 12.01.1982.

まあ、  module.exportsかつ  exports最後にあるものとの違いは?後者は単なる別名あなたですか?

ああ、少しではなく、かなり。

私が何を意味するか説明するために、変更できindex.js 、コード、出力moduleの値を:

console.log(module);

出力は次のようになります。

Module {
  id: '.',
  exports: {},
  parent: null,
  filename: '/home/jim/Desktop/index.js',
  loaded: false,
  children: [],
  paths:
   [ '/home/jim/Desktop/node_modules',
     '/home/jim/node_modules',
     '/home/node_modules',
     '/node_modules' ] }

私たちは、見ることができますmodule がありexports プロパティが。レッツ・追加の何か:

// index.js
exports.foo = 'foo';
console.log(module);

この意志出力:

Module {
  id: '.',
  exports: { foo: 'foo' },
  ...

するためにexports プロパティを追加し、またに追加  module.exportsこれは、exportsあるmodule.exports参照。

私はどちらを使うべきでしょうか?

今  module.exports とexports同じオブジェクトをポイントし、あなたが使用し、通常は問題ではありません。例えば:

exports.foo = 'foo';
module.exports.bar = 'bar';

このコードは、エクスポート対象のモジュールになるようになります{ foo: 'foo', bar: 'bar' }

しかし、注意を払う必要があります。あなたは、割り当てmodule.exportsモジュールの内容は、輸出の値になります。

たとえば、次のように:

exports.foo = 'foo';
module.exports = () => { console.log('bar'); };

これは、匿名関数をエクスポートします。foo変数は無視されます。

あなたがもっと学びたいのであれば、私はあなたが読んでお勧めします  この記事を

概要

JavaScriptのモジュールは、生態系の不可欠な一部となっている、それは、私たちは大きなプログラムの小さい部品を使用することができます。私はあなたが文法を理解しますが、Node.jsのモジュール、モジュールと同様にヘルプを使用するため、この記事では良い導入を行っている願っています。

著者:ジェームス・ヒバード
出典:SitePoint
翻訳:翻訳駅1024

1024の詩:マイクロチャンネル公衆番号で乾燥を行うために多くのフロントエンド技術
公共マイクロチャンネル番号:1024翻訳駅

おすすめ

転載: www.cnblogs.com/lzkwin/p/12165900.html