この記事では、なぜモジュール化が必要なのかについての内容をお届けします。 js で一般的に使用されるモジュラー ソリューションの紹介は、参考になると思います。
モジュール化が必要な理由
ES6 が登場する前は、JS 言語自体がモジュール化機能を提供していなかったため、開発にいくつかの問題が生じましたが、その中で最も重要なのは2 つの問題は、地球規模の汚染と依存関係管理の混乱であるはずです。
// file a.js var name = 'aaa'; var sayName = function() { console.log(name); };
<!-- file index.html --> <script></script> <script> sayName(); // 'aaa' // code... var name = 'bbb'; sayName(); // 'bbb' </script>
上記のコードでは、a.js が提供するsayName 関数を 2 回呼び出して、異なる結果を出力しました。これは明らかに、両方のファイルが変数名に値を割り当てているため、相互に影響を及ぼします。影響がありました。もちろん、コードを記述するときに既存の変数名を定義しないように注意することはできますが、ページが数百行からなる十数個のファイルを参照する場合、定義されているすべての変数を記憶するのは明らかに現実的ではありません。
// file a.js var name = getName(); var sayName = function() { console.log(name) };
// file b.js var getName = function() { return 'timo'; };
<script></script> <script></script> <script> sayName(); // 'timo' </script>
<script></script> <script></script> // Uncaught ReferenceError: getName is not defined
上記のコードは、複数のファイルに依存関係がある場合、特定のファイルの実行時にその依存関係が事前に読み込まれていることを確認するために、それらのファイルが導入される順序を確認する必要があることを示しています。ファイルやプロジェクトが大きくなると、より多くの依存関係を処理する必要があり、面倒でエラーが発生しやすくなることが考えられます。
これらの問題を解決するために、JS 言語のモジュール機能を提供する多くの仕様がコミュニティで登場しました。これらの仕様の助けを借りて、開発をより便利かつ安全にすることができます。
一般的なモジュール化ソリューション
CommonJS
CommonJS はコミュニティによって提案されたモジュール化ソリューションの 1 つであり、Node.js はこの設定された計画に従います。
基本的な書き方
// file a.js var obj = { sayHi: function() { console.log('I am timo'); }; }; module.exports obj;
// file b.js var Obj = require('xxx/xxx/a.js'); Obj.sayHi(); // 'I am timo'
上記のコードでは、ファイルa.jsがモジュールの提供者、ファイルb.jsがモジュールの呼び出し元です。
仕様
各ファイルはモジュールです。
モジュールモジュールオブジェクト内に提供されます。現在のモジュールを表す;
-
モジュールは exports を使用して独自の関数/オブジェクト/変数などを公開します。 ## モジュールは
require() メソッドで他のモジュールをインポートします; CommonJS の仕様は上記の 4 つだけです。基本的な記述方法の例では、実際の実装では、Node.js は CommonJS 仕様に従っていますが、それでもいくつかの調整が加えられています。
AMD
AMD はモジュール仕様の 1 つであり、RequireJS はこの一連の仕様に従います。
基本的な使用法
// file a.js define('module', ['m', './xxx/n.js'], function() { // code... })
上記のコードでは、ファイル a.js がモジュールをエクスポートします。
仕様
AMD では、公開されたモジュールは、define を使用します。 Function
define(moduleName, [], callback);
上記のコードに示すように、define 関数には 3 つのパラメータがあります。
moduleName このパラメータは通常、モジュールの名前を示します。ほとんど効果はありません
['name1', 'name2']、2 番目のパラメータは配列であり、現在のモジュールが依存する他のモジュールを示します。依存するモジュールがない場合は、このパラメータは省略可能です
- #callback、3番目のパラメータは必須パラメータです。これはコールバック関数です。内部は現在のモジュールの関連コードです #その他
ADM の特徴 ADM 仕様と次に紹介する CMD 仕様の最大の違いは、コールバックを実行する前です。現在ロードされているモジュールのすべての依存パッケージが最初にロードされます。これは、2 つのパラメータで指定された依存パッケージの定義の 3 番目のステップです。
CDM
基本的な書き方
define(function(require, exports, module) { var a = require('./a') a.doSomething(); // code... var b = require('./b') // code... })
上記のコードはCMD仕様エクスポートモジュールの基本的な書き方です。 #書き込み方法からわかる CMDの書き込み方法はAMDと非常に似ていることがわかります。主な違いは、前述のように、AMDがフロントエンドに依存していることです。 CMD 仕様では、モジュールの実行前に依存関係はロードされず、モジュールの実行中に特定の依存関係が必要になったときに再度ロードされます。
UMD
CommonJS、AMD、CMD を並行して使用する場合、それらと互換性のあるソリューションが必要になります。これにより、開発時に、それに続く仕様を考慮する必要がなくなります。依存モジュールが存在し、この問題を解決するのが UMD の登場です。
基本的な書き方
(function (root, factory) { if (typeof define === 'function' && define.amd) { //AMD define(['jquery'], factory); } else if (typeof exports === 'object') { //Node, CommonJS之类的 module.exports = factory(require('jquery')); } else { //浏览器全局变量(root 即 window) root.returnExports = factory(root.jQuery); } }(this, function ($) { //方法 function myFunc(){}; //暴露公共方法 return myFunc; }));
上記のコードはUMDの基本的な書き方です。コードからもわかるように、CommonJS仕様とAMD仕様の両方に対応しています。
ES6 モジュール
上記では、CommonJS、AMD、CMD、UMD をそれぞれ紹介しています。これらはすべて、JS のモジュール化に対するコミュニティの貢献です。この仕様が登場した根本的な理由は次のとおりです。 JS 言語にはモジュール化機能がありません。現在、JS の最新言語仕様 ES6 は、JS 独自のモジュール化ソリューションを完全に置き換えることができ、ブラウザー側で一般的に使用できます。そしてノード側。
#ES6 のモジュール化機能は、
exportと
importという 2 つのコマンドで構成されます。
exportコマンドは、
importコマンドは、他のモジュールが提供する関数をインポートするために使用されます。
export コマンドES6 のファイルはモジュールです。モジュール内の変数/関数は外部からアクセスできません。内部関数/変数を他のモジュールに公開したい場合は、次のようにします。これを使用するには、export コマンド を使用してエクスポートする必要があります。 上面三个文件的代码,都是通过export命令导出模块内容的示例,其中a.js文件和b.js文件都是导出模块中的变量,作用完全一致但写法不同,一般我们更推荐b.js文件中的写法,原因是这种写法能够在文件最底部清楚地知道当前模块都导出了哪些变量。 模块通过export命令导出变量/函数等,是为了让其他模块能够导入去使用,在ES6中,文件导入其他模块是通过import命令进行的 上面的代码中,我们引入了a.js文件中的变量a、b、c,import在引入其他模块内的函数/变量时,必须与原模块所暴露出来的函数名/变量名一一对应。 从上面import的介绍可以看到,当需要引入其他模块时,需要知道此模块暴露出的变量名/函数名才可以,这显然有些麻烦,因此ES6还提供了一个import default命令 上面的代码中,a.js通过export default命令导出了add函数,在b.js文件中引入时,可以随意指定其名称 export default命令是默认导出的意思,既然是默认导出,显然只能有一个,因此每个模块只能执行一次export default命令,其本质是导出了一个名为default的变量或函数。// file a.js
export let a = 1;
export let b = 2;
export let c = 3;
// file b.js
let a = 1;
let b = 2;
let c = 3;
export {a, b, c}
// file c.js
export let add = (a, b) => {
return a + b;
};
import命令
// file d.js
import {a, b, c} from './a.js';
同时,import命令引入的值是只读的,如果尝试对其进行修改,则会报错import {a} d from './a.js';
a = 2; // Syntax Error : 'a' is read-only;
export default命令
// file a.js
let add = (a, b) => {
return a+b
};
export default add;
// file b.js
import Add from './a.js';
Add(1, 2); // 3
以上がなぜモジュール化が必要なのでしょうか? js での一般的なモジュラー ソリューションの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。
