Javascriptモジュール仕様
1999 ワード
[Toc]
1.Common JSモジュール仕様モジュール参照 モジュール定義 モジュール識別(require()方法に渡すパラメータ) は、小さなこぶの命名に適合する文字列 である. 1️以./,.先頭の相対パスまたは絶対パス 2.AMD仕様(Aynchronous Module Defineモジュール定義)
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
において使用されているものは無視される.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
})