ホームページ ウェブフロントエンド jsチュートリアル JS モジュール性を実装するにはどのような方法がありますか? jsのモジュール化の説明

JS モジュール性を実装するにはどのような方法がありますか? jsのモジュール化の説明

Aug 11, 2018 pm 03:30 PM
フロントエンド

この記事でわかることは、JS のモジュール化の実装方法とは何か? js のモジュール化についての説明は、参考になると思います。

1. CommonJS
背景: 当初、誰もが JS は簡単なもので、ブラウザベースのアプリケーションしか構築できないと考えていました。 API は、一般的なアプリケーション (主にブラウザ以外のアプリケーション) で使用される多くの API を定義し、このギャップを埋めます。その最終的な目標は、Python、Ruby、Java に似た標準ライブラリを提供することです。この場合、開発者は CommonJS を使用できます。 さまざまな JavaScript インタープリターやさまざまなホスト環境で実行できるアプリケーションを作成するための API。 2009年、アメリカのプログラマー、ライアンが Dahl は、サーバーサイド プログラミングに JavaScript 言語を使用する、node.js プロジェクトを作成しました。これにより、「JavaScript モジュール型プログラミング」が正式に誕生しました。正直に言うと、ブラウザ環境ではモジュールがなくても大きな問題はありませんが、Web プログラムの複雑さは制限されていますが、サーバー側ではオペレーティング システムや他のアプリケーションと対話するためのモジュールが必要です。そうでなければプログラミングはできません。

具体的な代表例: nodeJs、webpack
原則: ブラウザーが CommonJS と互換性がない根本的な理由は、4 つの Node.js 環境変数 (module、exports、require、global、as long) が欠如していることです。これらは 4 つの変数を使用して、ブラウザーで CommonJS モジュールをロードできます
簡単な実装 :

var module = {  
exports: {}
};
(function(module, exports) {  
exports.multiply = function (n) { 
return n * 1000 
};
}(module, module.exports))
var f = module.exports.multiply;
f(5) // 5000
ログイン後にコピー


上記のコードは、即時実行関数に 2 つの外部変数 module とexports を提供します。出力値は module.exports 内に配置され、これによりモジュールのロードが実現されます。サーバーサイドモジュールの概念は確立されましたが、CommonJS には大きな制限があります。 この仕様はブラウザ環境には適用されません。 var math = require('math'); 3);require は同期です。すべてのモジュールはローカル ハードディスクに保存され、同期してロードできるため、これはサーバー側では問題ありません。しかし、ブラウザにとってこれは大きな問題です。モジュールはサーバー側に配置され、待ち時間はネットワークの速度に依存するため、長時間かかる場合があり、ブラウザは「停止状態」になります。州。ブラウザ側のモジュールは「同期読み込み」(同期)は利用できず、「非同期読み込み」(非同期)のみ利用可能です。これがAMD仕様誕生の背景です。


具体的な表現: RequireJS使用例
: require([dependency], function(){});
require() 関数は 2 つのパラメータを受け取ります

最初のパラメータは、すべての依存モジュールを表す配列です。

2 番目のパラメータはコールバック関数で、以前に指定したすべてのモジュールが正常にロードされたときに呼び出されます。ロードされたモジュールはパラメータとして関数に渡されるため、これらのモジュールはコールバック関数内で使用できます

// 定义模块 myModule.js
define(['dependency'], function(){    
var name = 'Byron';    
function printName(){        
console.log(name);    
}
    return {        
    printName: printName    
    };
    });
// 加载模块
require(['myModule'], function (my){  
my.printName();
});
ログイン後にコピー

3、CMD

背景の生成
: CMD仕様は国内で開発された共通モジュール定義です。 AMD に requireJS があるように、CMD にも SeaJS というブラウザ実装があります。SeaJS が解決する必要がある問題は requireJS と同じですが、モジュールの定義方法とモジュールの読み込み (実行、解析) のタイミングに違いがあります。

具体的な表現

: Sea .js使用例
:factoryは3つのパラメータを持つ関数、function(require,exports,module)requireは他のモジュールを取得するための唯一のパラメータとしてモジュールIDを受け入れるメソッドです提供インターフェース:require(id)エクスポートは、モジュールインターフェイスを外部に提供するために使用されるオブジェクトです
モジュールは、現在のモジュールに関連付けられたいくつかの属性とメソッドを保存するオブジェクトです

// 定义模块  myModule.js
define(function(require, exports, module) {  
var $ = require('jquery.js')  
$('p').addClass('active');});
// 加载模块
seajs.use(['myModule.js'], 
function(my){
});
ログイン後にコピー

AMDとCMDの違い:
実行メカニズム: モジュールに対するSeaJSの態度は次のとおりですモジュールに対する RequireJS の態度は実行前です
仕様準拠: RequireJS は AMD (非同期モジュール定義) 仕様に従い、Sea.js は CMD (共通モジュール定義) 仕様に従います。仕様の違いにより、2 つの API が異なります

4、ES6 モジュール

背景: Es6* より前には、JavaScript にはモジュール システムがありませんでした。大規模なプログラムを小さな相互依存ファイルに分割し、それらを簡単な方法でアセンブルすることは、大規模で複雑なプロジェクトの開発には非常に役立ちました。 。モジュールの依存関係読み込みの問題を解決するために、AMD、CMD、COMMONJS がクライアントに使用され、COMMONJS がサーバーに使用されます。 es6 の登場後、モジュールは関数として定義され、実装は非常にシンプルになり、既存の CommonJS および AMD 仕様を完全に置き換えて、ブラウザーとサーバーのユニバーサル モジュール ソリューションになることができます。
使用例: エクスポート (スロー) インポート (導入) デフォルトのエクスポート (他のモジュールがこのモジュールをロードするときに、インポート コマンドで匿名関数の任意の名前を指定できます)

関連する推奨事項:

JS モジュール化-RequireJS

JavaScriptモジュール化プログラミング(再版)、JavaScriptモジュール化_PHPチュートリアル

以上がJS モジュール性を実装するにはどのような方法がありますか? jsのモジュール化の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Nodeのメモリ制御に関する記事 Nodeのメモリ制御に関する記事 Apr 26, 2023 pm 05:37 PM

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

Node の File モジュールについて詳しく説明しましょう Node の File モジュールについて詳しく説明しましょう Apr 24, 2023 pm 05:49 PM

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

Vue3 で単体テストを作成する方法を調べる Vue3 で単体テストを作成する方法を調べる Apr 25, 2023 pm 07:41 PM

Vue.js は、今日のフロントエンド開発において非常に人気のあるフレームワークとなっています。 Vue.js が進化し続けるにつれて、単体テストの重要性がますます高まっています。今日は、Vue.js 3 で単体テストを作成する方法を検討し、いくつかのベスト プラクティスと一般的な問題と解決策を提供します。

PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ Mar 16, 2024 pm 12:09 PM

PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ 今日のインターネットの急速な発展の時代において、フロントエンド開発はますます重要になっています。 Web サイトやアプリケーションのエクスペリエンスに対するユーザーの要求がますます高まっているため、フロントエンド開発者は、より効率的で柔軟なツールを使用して、応答性の高いインタラクティブなインターフェイスを作成する必要があります。フロントエンド開発の分野における 2 つの重要なテクノロジーである PHP と Vue.js は、組み合わせることで完璧なツールと見なされます。この記事では、PHP と Vue の組み合わせと、読者がこれら 2 つをよりよく理解し、適用できるようにするための詳細なコード例について説明します。

クロスドメインの問題を解決するにはどうすればよいですか?一般的なソリューションの簡単な分析 クロスドメインの問題を解決するにはどうすればよいですか?一般的なソリューションの簡単な分析 Apr 25, 2023 pm 07:57 PM

クロスドメインは開発においてよく遭遇するシナリオであり、インタビューでもよく議論される問題でもあります。一般的なクロスドメイン ソリューションとその背後にある原則を習得すると、開発効率が向上するだけでなく、面接でのパフォーマンスも向上します。

フロントエンド開発に Go 言語を使用するにはどうすればよいですか? フロントエンド開発に Go 言語を使用するにはどうすればよいですか? Jun 10, 2023 pm 05:00 PM

インターネット技術の発展に伴い、フロントエンド開発の重要性がますます高まっています。特にモバイル デバイスの人気により、効率的で安定しており、安全で保守が容易なフロントエンド開発テクノロジーが必要です。 Go 言語は、急速に発展しているプログラミング言語として、ますます多くの開発者によって使用されています。では、フロントエンド開発に Go 言語を使用することは可能でしょうか?次に、この記事ではフロントエンド開発にGo言語を使用する方法を詳しく説明します。まずはフロントエンド開発にGo言語が使われる理由を見てみましょう。多くの人は Go 言語は

フロントエンドの面接官からよく聞かれる質問 フロントエンドの面接官からよく聞かれる質問 Mar 19, 2024 pm 02:24 PM

フロントエンド開発のインタビューでは、HTML/CSS の基本、JavaScript の基本、フレームワークとライブラリ、プロジェクトの経験、アルゴリズムとデータ構造、パフォーマンスの最適化、クロスドメイン リクエスト、フロントエンド エンジニアリング、デザインパターン、新しいテクノロジーとトレンド。面接官の質問は、候補者の技術スキル、プロジェクトの経験、業界のトレンドの理解を評価するように設計されています。したがって、候補者はこれらの分野で自分の能力と専門知識を証明するために十分な準備をしておく必要があります。

ノードのバッファーについて詳しく見る ノードのバッファーについて詳しく見る Apr 25, 2023 pm 07:49 PM

当初、JS はブラウザ側でのみ動作していたため、Unicode でエンコードされた文字列の処理は簡単でしたが、バイナリ文字列や非 Unicode エンコード文字列の処理は困難でした。バイナリは、コンピュータのビデオ/オーディオ/プログラム/ネットワーク パッケージの最低レベルのデータ形式です。

See all articles