一、为什么要用require.js?
最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了。后">
ホームページ ウェブフロントエンド jsチュートリアル Javascriptモジュラープログラミング(3)require.jsの使い方と機能入門_基礎知識

Javascriptモジュラープログラミング(3)require.jsの使い方と機能入門_基礎知識

May 16, 2016 pm 05:43 PM
require モジュール式プログラミング

このシリーズのパート 1 と 2 では、JavaScript モジュールのプロトタイプと理論的な概念を紹介しましたが、今回はそれらを実際に使用する方法を紹介します。
私は非常に人気のあるライブラリ require.js を使用しています。
Javascriptモジュラープログラミング(3)require.jsの使い方と機能入門_基礎知識
1. require.js を使用する理由
初期の頃、すべての Javascript コードは 1 つのファイルに記述されており、この 1 つのファイルをロードするだけで十分でした。その後、コードがどんどん増え、1 つのファイルでは不十分になり、複数のファイルに分割して順番にロードする必要がありました。以下の Web ページのコードを見たことがある人も多いと思います。

コードをコピー コードは次のとおりです:




< スクリプト src="4.js">
;<スクリプト src="5.js">
;<スクリプト src="6.js; ">

このコードは、複数の js ファイルを順番に読み込みます。
この書き方には大きな欠点があります。まず、ロード時にブラウザは Web ページのレンダリングを停止します。ロードされるファイルが増えると、Web ページの応答が失われる時間が長くなります。次に、js ファイル間の依存関係により、ロード順序が厳密に保証される必要があります。上記の例のように、1.js は 2.js の前に置く必要があり、依存関係が最も大きいモジュールを最後にロードする必要があります。依存関係が複雑になると、コードの記述とメンテナンスが困難になります。
require.js は、次の 2 つの問題を解決するために生まれました :
Javascriptモジュラープログラミング(3)require.jsの使い方と機能入門_基礎知識
(1) Web ページの応答の損失を避けるために、js ファイルの非同期読み込みを実装します。 2) モジュール間の依存関係を管理して、コードの作成とメンテナンスを容易にします。

2. require.js の読み込み require.js を使用するための最初のステップは、公式 Web サイトから最新バージョンをダウンロードすることです。
ダウンロード後、jsサブディレクトリ配下に配置されロードできるものとします。

コードをコピー コードは次のとおりです:


このファイルを読み込むと Web ページが応答しなくなる可能性があると考える人もいるかもしれません。解決策は 2 つあり、1 つは Web ページの下部にロードする方法、もう 1 つは次のように記述する方法です:

コードをコピー コードは次のとおりです。


async 属性は、このファイルが Web ページが応答しなくなるのを避けるために、非同期でロードする必要があることを示します。 IE はこの属性をサポートしておらず、defer のみをサポートしているため、defer とも記述されます。

require.js をロードしたら、次のステップは独自のコードをロードすることです。独自のコード ファイルが main.js であり、これも js ディレクトリの下に配置されていると仮定します。次に、次のように記述します:

コードをコピー コードは次のとおりです:
< ; script src="js/require.js" data-main="js/main">

data-main 属性は、ウェブプログラム。上記の例では、js ディレクトリ内の main.js が、require.js によって最初に読み込まれます。 require.js のデフォルトのファイル拡張子は js であるため、main.js は main と省略できます。

3. メインモジュールの書き方 前節の main.js を「メインモジュール」と呼びます。これは Web ページ全体のエントリーコードを意味します。これは C 言語の main() 関数に似ており、すべてのコードはここから実行を開始します。
main.jsの書き方を見てみましょう。
コードが他のモジュールに依存していない場合は、JavaScript コードを直接記述できます。
// main.js

コードをコピー コードは次のとおりです:
アラート("読み込み成功! ");
ただし、この場合、require.js を使用する必要はありません。本当に一般的な状況は、メイン モジュールが他のモジュールに依存することです。この場合、AMD 仕様で定義されている require() 関数を使用する必要があります。
// main.js
コードをコピー コードは次のとおりです:

require ([' moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB, moduleC){
// ここにコードがあります
});関数は 2 つのパラメータを受け入れます。最初のパラメータは配列であり、依存するモジュールを示します。上の例は ['moduleA', 'moduleB', 'moduleC'] です。つまり、メイン モジュールはこれら 3 つのモジュールに依存します。現在、この関数は上記で指定されたすべてのモジュールが正常にロードされた後に呼び出されます。ロードされたモジュールはパラメータとしてこの関数に渡されるため、これらのモジュールはコールバック関数内で使用できます。
require() は moduleA、moduleB、および moduleC を非同期的にロードします。ブラウザは応答を失いません。指定されたコールバック関数は、前のモジュールが正常にロードされた後にのみ実行され、依存関係の問題が解決されます。

以下では、実際的な例を見ていきます。
メインモジュールが jquery、アンダースコア、バックボーンの 3 つのモジュールに依存していると仮定すると、main.js は次のように記述できます:



コードをコピー コードは次のとおりです: require(['jquery', 'underscore', 'backbone'], function ($, _, Backbone){
//ここにいくつかのコードがあります
} );


require.js は、まず jQuery、アンダースコア、バックボーンをロードしてから、コールバック関数を実行します。メインモジュールのコードはコールバック関数内に記述されます。
4. モジュールの読み込み

前のセクションの最後の例では、メイン モジュールの依存モジュールは ['jquery'、'underscore'、'backbone'] です。デフォルトでは、require.js は、これら 3 つのモジュールが main.js と同じディレクトリにあり、ファイル名が jquery.js、underscore.js、backbone.js であると想定し、自動的にロードします。 require.config() メソッドを使用すると、モジュールの読み込み動作をカスタマイズできます。 require.config()はメインモジュール(main.js)の先頭に記述されます。パラメータはオブジェクトであり、このオブジェクトの paths 属性は各モジュールのロード パスを指定します。



コードをコピー コードは次のとおりです。 require.config({
Paths : {
"jquery": "jquery.min",
"underscore": "underscore.min",
"backbone": "backbone.min"
}); 🎜>
上記のコードは、3 つのモジュールのファイル名をデフォルトで main.js と同じディレクトリ (js サブディレクトリ) に指定します。これらのモジュールが js/lib ディレクトリなどの他のディレクトリにある場合、モジュールを記述する方法は 2 つあります。 1 つはパスを 1 つずつ指定する方法です。



コードをコピー

コードは次のとおりです。 require.config({ Paths : { "jquery": "lib/jquery.min", "アンダースコア": "lib/underscore.min",
"バックボーン": "lib/backbone.min"
}
});


もう 1 つは、ベース ディレクトリ (baseUrl) を直接変更する方法です。



コードをコピー

コードは次のとおりです: require.config({ BaseUrl : "js /lib", パス: { "jquery": "jquery.min",
"underscore": "underscore.min",
"backbone": "backbone.min "
}
});


モジュールが別のホスト上にある場合は、次のように URL を直接指定することもできます:



コードをコピー

コードは次のとおりです: require.config({ paths: { "jquery": "https ://ajax .googleapis.com/ajax/libs/jquery/1.7.2/jquery.min" }
});


require.js では、各モジュールが個別の js ファイルであることが必要です。この場合、複数のモジュールが読み込まれると、複数の HTTP リクエストが発行されるため、Web ページの読み込み速度に影響します。したがって、require.js には最適化ツールが用意されており、モジュールをデプロイした後、このツールを使用して複数のモジュールを 1 つのファイルにマージし、HTTP リクエストの数を減らすことができます。
5. AMD モジュールの書き方
require.js で読み込まれるモジュールは AMD 仕様を採用しています。つまり、モジュールは AMD の規定に従って作成する必要があります。
具体的には、モジュールは特定のdefine()関数を使用して定義する必要があります。モジュールが他のモジュールに依存していない場合は、define() 関数で直接定義できます。

数学モジュールを定義する math.js ファイルがあると仮定します。次に、 math.js は次のように書く必要があります:
// math.js
コードをコピー コードは次のとおりです:

define(function (){
var add = function (x,y){
return x y;
};
return {
add: add
};
});

読み込み方法は次のとおりです:
// main.js
コードをコピー コードは次のとおりです:
require(['math'], function (math){
alert(math.add(1) ,1));
}) ;

このモジュールが他のモジュールにも依存している場合、define() 関数の最初のパラメーターはモジュールの依存関係を示す配列でなければなりません。

コードをコピー コードは次のとおりです。
define(['myLib'], function (myLib) {
Function foo(){
myLib.doSomething();
return {
return { foo : foo
}); require() 関数は上記のモジュールをロードします。myLib.js ファイルが最初にロードされます。

6. 非標準モジュールのロード

理論的には、require.js によってロードされるモジュールは、AMD 仕様に従って、define() 関数で定義されたモジュールである必要があります。しかし実際には、一部の一般的な関数ライブラリ (jQuery など) はすでに AMD 仕様に準拠していますが、さらに多くのライブラリは準拠していません。
では、require.js は非標準モジュールをロードできるのでしょうか?

答えは「はい」です。 このようなモジュールを require() でロードする前に、まず require.config() メソッドを使用してモジュールの特性の一部を定義する必要があります。 たとえば、アンダースコアとバックボーンの 2 つのライブラリは、AMD 仕様を使用して書かれていません。それらをロードする場合は、まずその特性を定義する必要があります。


コードをコピー

コードは次のとおりです: require.config({ shim : { | 'アンダースコア': { エクスポート: '_'
},
'バックボーン': { 'jquery'],
ボーン '
}
}
});


require.config() は、前述の paths 属性に加えて、特別に使用される shim 属性も持ちます。互換性のないモジュールを構成します。具体的には、各モジュールは、(1) 外部から呼び出されるモジュールの名前を示すエクスポート値 (出力変数名)、(2) モジュールの依存関係を示す deps 配列を定義する必要があります。
たとえば、jQuery プラグインは次のように定義できます。



コードをコピーします


コードは次のとおりです。 }



7. require.js プラグイン

require.js は、いくつかの特定の機能を実装するための一連のプラグインも提供します。
domready プラグインを使用すると、ページ DOM 構造がロードされた後にコールバック関数を実行できます。

コードをコピー


コードは次のとおりです。
require(['domready!'], function (doc ){ // DOM の準備ができたら呼び出されます });
テキスト プラグインと画像プラグインを使用すると、require.js でテキスト ファイルと画像ファイルを読み込むことができます。
コードをコピー コードは次のとおりです。

define([
text!review .txt ',
'image!cat.jpg'
],
function(review,cat){
console.log(review)
document.body.appendChild(cat); ;
}
);

同様のプラグインには、json ファイルとマークダウン ファイルを読み込むために使用される json と mdown があります。
(終わり)
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

vue3+vite: src に画像を動的にインポートするために require を使用するときのエラーを解決する方法 vue3+vite: src に画像を動的にインポートするために require を使用するときのエラーを解決する方法 May 21, 2023 pm 03:16 PM

vue3+vite:src は、イメージとエラー レポートと解決策を動的にインポートするために require を使用します。vue3+vite は複数のイメージを動的にインポートします。vue3。TypeScript 開発を使用している場合、イメージを導入するために require のエラー メッセージが表示されます。requireisnotdefined は使用できません。 vue2 のような imgUrl:require(' .../assets/test.png') は、typescript が require をサポートしていないため、インポートされます。そのため、import が使用されます。解決方法は次のとおりです: awaitimport を使用します

Python コードでの過剰な関数のネスト エラーを解決するにはどうすればよいですか? Python コードでの過剰な関数のネスト エラーを解決するにはどうすればよいですか? Jun 25, 2023 pm 12:35 PM

Python は非常に強力なプログラミング言語であり、多くのプログラマーが主要なプログラミング言語として Python を選択しています。ただし、コード内で関数のネストが多すぎると、プログラムの保守と理解が困難になる可能性があります。この記事では、Python コードでの過剰な関数のネスト エラーを解決する方法を説明します。関数のネストの簡単な説明 関数のネストとは、関数の本体内で別の関数を定義するプロセスを指します。関数をネストすると、プログラムの構造がより明確になり、コードが読みやすく、保守しやすくなります。ただし、ネストされた関数が多すぎると、コード構造が過度に複雑になる可能性があります。

require の用途は何ですか? require の用途は何ですか? Nov 27, 2023 am 10:03 AM

require の使用法: 1. モジュールの導入: 多くのプログラミング言語では、require は外部モジュールまたはライブラリを導入し、それらが提供する関数をプログラム内で使用できるようにするために使用されます。たとえば、Ruby では、require を使用してサードパーティのライブラリまたはモジュールをロードできます。 2. クラスまたはメソッドのインポート: 一部のプログラミング言語では、require を使用して特定のクラスまたはメソッドをインポートし、現在のファイルで使用できるようにします。 ; 3. 特定のタスクを実行する: 一部のプログラミング言語またはフレームワークでは、特定のタスクまたは関数を実行するために require が使用されます。

関数型プログラミングとGolang関数のモジュール型プログラミングの比較分析 関数型プログラミングとGolang関数のモジュール型プログラミングの比較分析 May 16, 2023 am 08:14 AM

近年のGolangの発展により、徐々に世間に認知されるようになったプログラミング言語の一つです。その中でも、Golang は関数型プログラミングとモジュール型プログラミングにおいても大きな利点を持っています。この記事では、Golang 関数型プログラミングとモジュール型プログラミングの長所、短所、およびアプリケーション シナリオについて詳しく分析します。 Golang 関数型プログラミング 関数型プログラミングは、比較的最近のプログラミング パラダイムであり、関数がプログラミング言語の第一級市民であり、他の値と同様に渡したり操作したりできることを主に強調しています。関数型プログラミングの現れ

PHP ヘッダーの致命的なエラーを解決する手順: require(): 必要な 'data/tdk.php' を開くことができませんでした (include_path='.;C:\php\pear') PHP ヘッダーの致命的なエラーを解決する手順: require(): 必要な 'data/tdk.php' を開くことができませんでした (include_path='.;C:\php\pear') Nov 27, 2023 pm 12:51 PM

PHP ヘッダーの Fatalerror:require():Failedopeningrequired'data/tdk.php'(include_path='.;C:phppear') を解決する手順 PHP を使用して Web サイトやアプリケーションを開発する場合、さまざまなエラーが発生することがよくあります。一般的なエラーの 1 つは、「fatalerror:require():Failed」です。

PHP によるモジュール設計 PHP によるモジュール設計 May 28, 2023 am 09:31 AM

近年、インターネット技術の急速な発展に伴い、PHP は効率的で強力かつ柔軟な Web プログラミング言語として、ますます多くの開発者に採用されています。ただし、サーバーサイド言語として、大規模なプロジェクトを扱う場合、PHP コードのメンテナンスと管理は大きな課題となります。この問題を解決するために、PHP 開発者は複雑なアプリケーションを構築するためのモジュール設計のアイデアを採用し始めました。この記事では、モジュラー設計のメリット、モジュラー設計の実装方法、モジュラー設計など、PHP でのモジュラー設計について詳しく紹介します。

PHP ヘッダーの致命的なエラーを解決する手順: require(): 必要な 'data/tdk.php' を開けませんでした PHP ヘッダーの致命的なエラーを解決する手順: require(): 必要な 'data/tdk.php' を開けませんでした Nov 27, 2023 am 10:41 AM

PHP ヘッダーの FatalError:require():Failedopeningrequired'data/tdk.php' を解決する手順 PHP Web サイトを開発および保守するときに、さまざまなエラーや例外が頻繁に発生します。一般的なエラーの 1 つは、「FatalError:require():Failedopeningrequired'data/tdk.php'」です。

PHPにおけるrequireキーワードの役割と使い方を詳しく解説 PHPにおけるrequireキーワードの役割と使い方を詳しく解説 Jun 28, 2023 pm 11:31 PM

PHPにおけるrequireキーワードの役割と使い方を詳しく解説 PHP開発において、requireは非常によく使われるキーワードです。その機能は、現在のスクリプトで使用するために指定されたファイルをインクルードすることです。この記事ではrequireキーワードの機能と使い方を詳しく解説します。 1. require キーワードの役割 require キーワードは、ファイルの内容を現在のスクリプトに含めることができます。通常、ライブラリ ファイル、設定ファイルなどの必要な外部ファイルを含めるために使用されます。要求を使用する

See all articles