JavaScript ES6 モジュールの詳細な説明

JavaScript ES6 モジュールの詳細な説明

0. モジュールとは何か

歴史的に、JavaScript にはモジュール システムがなかったため、大規模なプログラムを小さな相互依存ファイルに分割し、それらを簡単な方法で組み立てることは不可能でした。他の言語にもこの機能があり、例えばRubyのrequire、Pythonのimport、さらにはCSSにも@importがありますが、JavaScriptにはこの点に関するサポートがないため、大規模で複雑なプロジェクトの開発に大きな障害となっています。

ES6 より前に、コミュニティはいくつかのモジュール読み込みソリューションを開発しましたが、その中で最も重要なのは CommonJS と AMD でした。 ES6 モジュールの設計思想は、モジュールの依存関係や入力変数、出力変数をコンパイル時に決定できるように、可能な限り静的にすることです。 ES6 モジュールはオブジェクトではなく、エクスポート コマンドを通じて出力用に明示的に指定され、インポート コマンドを通じてインポートされるコードです。

モジュール システムによって解決される主な問題は次のとおりです。

  • モジュール化の問題
  • グローバル変数を削除する
  • ロード順序の管理

1.モジュールの読み込み

<script> タグを使用してモジュールをロードする場合は、type="module" を追加する必要があります。

1.1 方法1

<スクリプトタイプ="モジュール">
    「./module.js」からモジュールをインポートします。
</スクリプト>

1.2 方法2

<script src="./module.js" type="module"></script>

2. 輸出と輸入

2.1 モジュールのエクスポートは他のモジュールからインポートしてアクセスできます。

例 1: About.js を使用して Base.js 内の Base オブジェクトを呼び出し、ホームページに出力します。

インデックス.html

<スクリプトタイプ="モジュール">
    「./js/About.js」からAboutをインポートします。
    console.log(バージョン情報);
</スクリプト>

ベース

定数ベース = {
    ニックネーム: 'admin',
    年齢: 19
}
デフォルトのベースをエクスポートします。

について

'../js/Base.js' から Base をインポートします。
const src = `ニックネーム:${Base.nick},年齢:${Base.age}.`;
デフォルトの src をエクスポートします。

出力:

ニックネーム:admin、年齢:19。

2.2 輸出されていなくても輸入できる

例 2: About.js はエクスポートされず、ホームページにインポートされます。

インデックス.html

<スクリプトタイプ="モジュール">
    「./js/About.js」をインポートします。
</スクリプト>

について

const src = 'Hello World!';
コンソールログ(ソース);

出力:

「こんにちは世界」

2.3 インポートされたコードは一度だけ実行されます

例 3: About.js を 3 回インポートし、エクスポート結果を確認します。

インデックス.html

<スクリプトタイプ="モジュール">
    「./js/About.js」をインポートします。
    「./js/About.js」をインポートします。
    「./js/About.js」をインポートします。
</スクリプト>

について

const src = 'Hello World!';
コンソールログ(ソース);

出力:

「こんにちは世界」

3. デフォルトのエクスポートと対応するインポート

export default はデフォルト値をエクスポートするために使用されます。モジュールには 1 つしか設定できません。

エクスポートにエクスポート デフォルトを使用する場合、インポート名は任意の名前にすることができます。

例 4: export default を使用してエクスポートし、インポートに任意の名前を付けます。

インデックス.html

<スクリプトタイプ="モジュール">
    「./js/About.js」からbbbをインポートします。
    コンソールにログ出力します。
</スクリプト>

について

const src = 'Hello World!';
デフォルトの src をエクスポートします。

出力:

「こんにちは世界」

4. 輸出とそれに伴う輸入

export を使用してエクスポートする場合、インポートの名前は任意にすることはできません。

例 5: export を使用してエクスポートします。

インデックス.html

<スクリプトタイプ="モジュール">
    「./js/About.js」から{age、nick}をインポートします。
    console.log(ニックネーム、年齢);
</スクリプト>

jsについて

定数年齢 = 18;
{age} をエクスポートします。
// 年齢をエクスポートします; ×
// エクスポート const age = 18; √
エクスポート const nick = 'admin';

出力:

管理者 18

5. モジュールに関する注意事項

1. モジュールでは、トップレベルの this は undefined を指します。

2import には昇格効果があり、モジュール全体の先頭に昇格され、最初に実行されます。

3. インポートが実行された時点では、コードはまだ実行されていません。

4. インポートとエクスポートは、コード ブロック内ではなく、モジュールの最上位レベルでのみ実行できます。

5.import() は条件付きでインポートできます。

6. 複合書き込みメソッドはエクスポートされており、現在のモジュールでは使用できません

複合書き込み、インポートしてからエクスポート:

'./js/About.js' から About をエクスポートします。

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • Node.js エクスポート、module.exports および ES6 エクスポート、エクスポートのデフォルトの詳細な説明
  • ES6入門チュートリアル: クラスとモジュールの詳細な説明
  • ES6のモジュール開発例の簡単な分析
  • ES6の新機能であるModuleの使い方を詳しく解説

<<:  Docker でコンテナのポート マッピングを動的に変更する方法

>>:  CSS セレクタのグループ化の簡単な分析

推薦する

vue-cropperプラグインは、画像キャプチャとアップロードコンポーネントのカプセル化を実現します。

vue-cropperプラグインをベースにした画像キャプチャとアップロードコンポーネントをカプセル...

チェックボックスの選択またはキャンセルを実装するJavaScript

この記事では、すべてのチェックボックスを選択または解除するためのJavaScriptの具体的なコード...

Linuxにおけるselinuxの基本設定チュートリアルの詳細な説明

selinux ( Security-Enhanced Linux)は、Linux カーネル モジュ...

フロントエンド開発者は毎日HTMLタグの理解を学ばなければならない(1)

2.1 セマンティクス化により、Webページが検索エンジンに理解されやすくなりますこの章では、We...

CentOS サーバーのセキュリティ構成戦略

最近、ブルートフォース攻撃によるサーバのクラッキングが頻発しています。侵入行為を大まかに分析し、よく...

MySQL 5.7.18 のインストール中に MySQL サービスの起動に失敗する問題の解決策

MySQL は非常に強力なリレーショナル データベースです。しかし、初心者の中には、インストールや設...

docker createコマンドの使用方法

docker create コマンドは、イメージに基づいてコンテナを作成できます。このコマンドの効果...

シンプルなスネークゲームを実現するネイティブjs

この記事では、スネークゲームを実装するためのjsの具体的なコードを参考までに共有します。具体的な内容...

MySQL の不正な文字列値の解決方法

MySQL を使用して中国語の文字を挿入すると、多くの友人から次のエラーが報告されます。 これは、文...

Vue+elementuiはドロップダウンテーブルの複数選択と検索機能を実現します

この記事では、ドロップダウンテーブルの複数選択と検索を実現するためのvue+elementuiの具体...

divとspanの違いと使い方

目次1. DIVとSPANの違いと特徴2. スパンタグの概要3. 拡大と改善4. 凡例の効果の実証例...

JavaScript プロトタイプとプロトタイプチェーンの深い理解

目次1. プロトタイプとは何ですか? 2. プロトタイプ__プロト__ 4. コンストラクター5. ...

jQueryはテーブルのシームレスなスクロールを実現します

この記事の例では、テーブルのシームレスなスクロールを実現するためのjQueryの具体的なコードを参考...

複数ページ通信を実現する JavaScript の sharedWorker の詳細な例

こんなことがありました。今日はGitHubで遊んでいました。最初はログインせずにいくつかのページを閲...

CocosCreatorがスキル冷却効果を実装

CocosCreatorがスキルCD効果を実現多くのゲームにはスキルがあります。プレイヤーがスキルボ...