## JSモジュラー
モジュラー*感謝
*?モジュールとは何ですか
*いくつかのブロック(ファイル)にパッケージ化一定のルール(仕様)に基づいて、複雑なプロセスになるだろう、と合わせ
* /プライベート実装は唯一にある内部データブロック外部露光外部の他のモジュールと通信するいくつかのインタフェース(メソッド)は
*構成されるモジュール
*データ--->内部属性は、
操作データの振る舞いを* --->内部関数
*モジュラー
*コーディングがブロックに係る符号化ですプロジェクト全体は、モジュラープロジェクトです
モジュラー進化*
*グローバル機能モード:
*エンコーディング:グローバル変数/関数
問題:汚染グローバル名前空間の名前の競合/がちなデータが安全ではないです
*名前空間モード:
*エンコーディング:データ/オブジェクトの動作がカプセル化
*ソリューション:(グローバル変数を減らす)名前の重複
*質問:安全でないデータ(外部データはモジュール内で直接変更することができます)
*生命維持モード/拡張
*生命維持:すぐに関数式を呼び出す--->無名関数からの呼び出し
*コード:挙動データとインタフェースウィンドウに属性を追加することによって、内部機能にカプセル化が外部に露出されているが、
*頼る導入:モジュールに依存するパラメータは関数形式を導入し
、 `` `
(関数(ウィンドウ、モジュール2){
VARデータ=「atguigu.com '
関数foo(){
module2.xxx()
はconsole.log('のfoo() '+データ)
}
関数bar(){
にconsole.log('バー()「+データ)
}
window.module = {FOO}
})(ウィンドウ、モジュール2)
`` `
*モジュラー仕様
CommonJS *
*のNode.js:サーバー
* Browserify:また、ブラウザのJSパッケージツールと呼ばれる
基本的な構文を*:
*定義された露光モジュール:輸出
`` `
exports.xxx値=
module.exportsは値=
` ``
インテークモジュール必要:
`` `
VARモジュールは=(「モジュール/モジュール相対パス」)が必要です
` ``
*導入モジュールは、どのような時に起こったのか?
*ノード:実行時に、動的な同期プル
* Browserifyを:モジュールは/実行前にコンパイルされています(モジュールの依存関係に含まれて来ている)翻訳後プロセシング/充填し、
生成されたパックJSを実行するには、リモート・ランタイム・モジュールの導入に依存する必要から存在していません
* AMD:ブラウザ
* require.js
*基本的な構文
*定義露出モジュール:定義([依存モジュール名]、関数(){リターンオブジェクトモジュール})
*導入モジュール:必要([ 'モジュール1'、「2モジュール''モジュール3 ']、関数(M1、 M2){// オブジェクト利用モジュール})
*設定:
`` `
require.config({
//ベースパス
baseUrlに:' JS / '
//パス名を識別マッピング
パス:{
'モジュール1': 'モジュール/モジュール1'、
'モジュール2': 'モジュール/モジュール2'、
'角度': 'LIBS /アンギュラ'、
'アンギュラメッセージ':」LIBS / angular-メッセージ
}、
//非AMDモジュール
シム:{
'角度':{
輸出: '角度'
}
'アンギュラメッセージ':{
輸出: 'アンギュラメッセージ'、
DEPS:[ '角度']
}
}
})
`` `
* CMD:ブラウザ
* sea.js
*基本的な構文
*定義露出モジュール:
`` `
(関数(必要、Module1のは、)輸出DEFINE {
依存モジュールでは、導入が必要な
モジュールModule1のを露出させるために/輸出
exports.xxx =値
} )
`
*使用モジュールseajs.use([ 'モジュール1'、 'モジュール2'])
ES6のため*
* ES6ための組み込みモジュール式の実装
*基本的な構文
*定義された露光モジュール:エクスポート
*オブジェクトさらす:
`` `
エクスポート・デフォルト・オブジェクトを
`
*複数の露光:
`
輸出VAR = XXX VALUE1
輸出のlet YYY = VALUE2の
VaRのXXX = VALUE1
LETのYYY = value2の
エクスポート{XXX、YYY}
``
*モジュールを使用して導入:インポート
*デフォルトモジュール:
`
'モジュールパス/モジュール名'からインポートXXXを
`
*他のモジュールを
`
インポート{XXX、YYY}「パスモジュール/モジュール名」から
インポート*「モジュールパス/モジュール名」からのModule1として
`` `
*質問:すべてのブラウザが直接ES6モジュラー文法を識別することはできません
*解決策:
*使用バベルがES6ます---> ES5(CommonJS使用) - -ブラウザが直接分岐ではありません
* Browserifyを使用--->パッキングプロセス----ブラウザが実行することができます