2012-06-08 5 views
2

간단한 테스트 프로젝트로 나 자신에게 대답 할 수 있음을 깨달았습니다. (아무도 울리지 않을 수도 있습니다.) 그러나 SO 또는 Google 어디서나 답을 찾을 수 없었습니다. 중요한 것 같습니다.RequireJS : 모듈을 가져 오거나 처음 사용할 때마다 모듈 함수가 실행됩니까?

나는 같은 require.js와 함께 AMD 모듈을 정의하는 경우 :

//a.js 
define(['stuff'], function (Stuff) { 
    return { thing: new Stuff() }; 
} 

을 그리고 I는 다음과 같은 두 가지 다른 모듈에서 사용 :

// b.js 
define(['a'], function(a) { 
    // do something with a's stuff 
}); 

// c.js 
define(['a'], function(a) { 
    //do something else with a's stuff 
} 
합니까 a의 정의 함수가 호출되는

(따라서 새로운 Stuff 인스턴스화 된) 다른 모듈에 대해 필요할 때마다 또는 한 번만 호출되고 출력이 캐시됩니까?

분명히 이것은 일부 유스 케이스에서는 중요하지만 require.js 문서 또는 필자가 보았던 다른 예제에서는 명확하지 않다.

답변

7

난 그냥 내 자신을 테스트하고 생성자가 한 번만 실행되는 것 같습니다. 내가 index.html을 열 때

// stuff.js 
define(function() { 
    return function() { 
     console.log('making new!'); 
    }; 
}); 

// a.js 
define(['stuff'], function (Stuff) { 
    return { thing: new Stuff }; 
}); 

// b.js 
define(['a'], function(a) { 
}); 

// c.js 
define(['a'], function(a) { 
}); 

// app.js 
define(['b', 'c'], function() { 
    console.log('app'); 
}); 

// index.html 
<html> 
<head> 
    <script src='requirejs/require.js' data-main='app.js'></script> 
</head> 
</html> 

, 콘솔 보여줍니다

making new!        stuff.js:3 
app          app.js:2 
관련 문제