Javascriptモジュール仕様

1999 ワード

[Toc]
1.Common JSモジュール仕様
  • モジュール参照
  • var math=require('math')
    
  • モジュール定義
  • //math.js
    exports.add=function(){
        //...
    }
    //program.js
    var math=require('math')
    exports.increment=function(val){
        return math.add(val,1)
    }
    
    exportsはmodule.exportsの参照であり、本当に導出されたのはmodule.exportsである.
    //foo.js
    exports.a = function(){
      console.log('a')
     }
    
     module.exports = {a: 2}
     exports.a = 1 //    module.exports,        
     //test.js
     var x = require('./foo');
     console.log(x.a)//2
    
    モジュールは最終的にmodule.exportsを返し、exportsではなく调节者に与える.exportsがしていることは、収集属性であり、module.exportsが現在何の属性も持っていない場合、exportsは、これらの属性をmodule.exportsに与える.module.exportsに既にいくつかの属性が存在すると、exportsにおいて使用されているものは無視される.
  • モジュール識別(require()方法に渡すパラメータ)
  • は、小さなこぶの命名に適合する文字列
  • である.
  • 1️以./,.先頭の相対パスまたは絶対パス
  • 2.AMD仕様(Aynchronous Module Defineモジュール定義)define(id?,dependencies?,factory)
    define(function(){
        var exports={}
        exports.sayHello=function(){
            alert('Hello')
        }
        return exports
    })
    
    3.CMD仕様
    //dep1 dep2     
    define(['dep1','dep2'],function(dep1,dep2){
        return function(){}
    })
    //    ,CMD      
    define(function(require,exports,module)){
        //    
    }
    
    4.複数のモジュール仕様に対応する
    (function(name,definition){
        //          AMD CMD
        var hasDefine=typeof define==='function',
        //           node
        hasExports=typeof module!=='undefined'&&module.exports
        if(hasDefine){
            //AMD   CMD  
            define(definition)
        }else if(hasExports){
            //     node  
            module.exports=definition()
        }else{
            //         window   
            this[name]=definition
        }
    })('hello',function(){
        var hello=function(){}
        return hello
    })