2012-01-16 4 views
9

RequireJS를 사용하는 응용 프로그램에 대한 몇 가지 테스트를 작성하고 있습니다. 응용 프로그램의 작동 방식 때문에 require을 호출하여 일부 클래스를 가져올 것으로 예상됩니다. 따라서 테스트를 위해 약간의 더미 클래스가 있지만이 테스트를 위해 개별 파일에 넣지 않아도됩니다. 여기모듈 정의 및 RequireJS 즉시 사용하기

define('test/foo', function() { 
    return "foo"; 
}); 

define('test/bar', function() { 
    return "bar"; 
}); 

test("...", function() { 
    MyApp.load("test/foo"); // <-- internally, it calls require('test/foo') 
}); 

문제는 스크립트 onload 이벤트 해고 될 때까지 그 모듈의 평가가 지연되고 있다는 점이다 : 나는 많은 단지 define()이를 수동으로 테스트 파일 내의과 같이 선호하는 것입니다. require.js around line 1600에서

:

//Always save off evaluating the def call until the script onload handler. 
//This allows multiple modules to be in a file without prematurely 
//tracing dependencies, and allows for anonymous module support, 
//where the module name is not known until the script onload event 
//occurs. If no context, use the global queue, and get it processed 
//in the onscript load callback. 
(context ? context.defQueue : globalDefQueue).push([name, deps, callback]); 

내가 수동으로 큐를 실행할 수있는 몇 가지 방법이 있나요은

를 평가한다?

답변

0

모듈 정의는 파일 당 하나씩으로 제한해야합니다 (here 참조). 하나의 파일에 여러 개의 모듈이 정의되어 있으면 스크립트의로드 이벤트를 사용하여 종속성을 해결하는 동안 준비가되었는지 확인할 수있는 내부로드 메커니즘이 중단됩니다.

테스트 용 일지라도 여러 정의로 나누는 것이 좋습니다.

희망이 도움이됩니다. 건배.

+0

, 당신은 단지에있는을 각 모듈에 특정 이름을 부여하십시오 (OP의 각'define' 함수에 대한 첫 번째 문자열 인수를보십시오). – nickf

+0

또한 모듈은 테스트 용이며 ** 매우 기본 **입니다. 위의 예보다 약간 복잡하지만 많이는 아닙니다. 각 파일을 자체 파일에 저장하는 것은 너무 혼란 스럽습니다. – nickf

+0

확실합니다. 이해합니다. 하지만 내가 문서에서 알 수있는 것부터, 최적화/빌드 단계가 발생한 후에는 여러 개의 모듈이있는 단일 파일이있는 유일한 경우입니다. 솔직히 말해서, 나는 requirejs에 익숙하지 않지만, 몇 가지 프로젝트에서 사용했다. 워드 프로세서는 꽤 명확합니다. '디스크에 파일 당 * 모듈 정의가 하나만 있어야합니다. 최적화 도구를 사용하여 모듈을 최적화 된 번들로 그룹화 할 수 있습니다. ' 나는 거기에서 시작할 것이다 :) – keeganwatkins

1

지금까지 비동기 모듈을 필요로하는 것입니다 발견했습니다 최고 :

define("test/foo", function() { ... }); 
define("test/bar", function() { ... }); 

require(["test/foo"], function() { 
    var foo = require('test/foo'), 
     bar = require('test/bar'); 
    // continue with the tests.. 
}); 
당신은 (당신이 + 최적화 전체 응용 프로그램을 작게를 할 때 고려해야) 파일 당 하나 개 이상의 모듈을 추가 할 수 있습니다
관련 문제