JSモジュール化の過程
2533 ワード
まず、ES 6の
common Js規格
エクスポート
AMD仕様
CMD仕様
AMDの仕様とはちょっと違っています.工場関数はデフォルトでは3つのパラメータがあり、 を使用することができる.は工場関数内部で
短所:近い依存性はテンプレートを解析してからどのモジュールをロードするかを知っていなければなりませんが、解析モジュールの時間は短くても無視できます.使用者:seaJs
ES 6 Module
エクスポート
class
が出る前にはモジュールがありません.JSはモジュール化された言語ではありません.いわゆる「モジュール」は匿名の関数か、あるいはオブジェクトの疑似モジュールです.var module = (function(){
let _count = 2 //
let m1 = function() {
console.log(_count)
}
let m2 = function() {
console.log(_count + 1)
}
return {
m1,
m2
}
})()
転換点:2009年に米国のオオカミさんプログラマーがnodeJs
を発明しました.サーバーはモジュールが必要です.オペレーティングシステムと他のアプリケーションと対話しないとプログラムできないので、commonJs
仕様を引き出しました.common Js規格
エクスポート
module.exports = {
math
}
exports // module.exports , ,
導入するlet math = require('math') // ,
math.add(2,3)
短所:nodeJs
はサーバー言語ですので、モジュールは現地に置いてあります.ロード速度は比較的速いですが、先端にJSをロードするのはサーバーからロードしたものです.遅いので、ブラウザの仮死状態を引き起こす可能性があります.AMD仕様
define(id?, dependencies?, factory)
* id: , ( ),
* dependencies: ( ), 。,
* factory: ,
エクスポート// math.js
define(['lib'],function(){ // lib.js
let add = function(x, y){
return x + y
}
return {
add
}
})
導入するrequire(['math'],function(){
math.add(2,3)
})
利点:非同期ローディングモジュールでは、実行内容はコールバックにおいて欠点があります.欠点とは言えません.すべての依存は、ファイルの頭にあるユーザーに宣言しなければなりません.CMD仕様
AMDの仕様とはちょっと違っています.
define(['lib'],function(require, exports, module){ // lib.js
let a = require('./a') // a.js
a.test()
let add = function(x, y){
return x + y
}
module.exports = {
add
}
})
AMDとの違い:require
はモジュールを導入するために使用され、exports
およびmodule
は導き出すために使用され、もちろん導出も直接return
require
でモジュールを導入することができます.すべての依存性を頭に宣言する必要はなく、近い依存性を実現し、開発者に友好的です.短所:近い依存性はテンプレートを解析してからどのモジュールをロードするかを知っていなければなりませんが、解析モジュールの時間は短くても無視できます.使用者:seaJs
ES 6 Module
エクスポート
// , export, exports
function addition(){}
export {addition} //
export const foo = 'Hello' //
export default function(){} // , ,
export default class() //
導入するimport defaultModule from 'module-name' // export default
import * as name from 'module-name' // , name.add()
import { add, del } from 'module-name' // ,
import from 'module-name' //