2014-03-12 15 views
1

같은 하위 수준에서 파일 이름을 확인할 수 없습니다) (필요 .RequireJS는 내가 지금과 같은 디렉토리 구조를 가지고

main.js : 존재하지 않는 require()응용 프로그램/JS/santa.js

require('santa') 

시도하지만 main.js의 모든 동일 디렉토리 require() 문제가 있습니다. 존재하지 않는 require()응용 프로그램/JS/santa.js

require('./santa') 

시도합니다. require()응용 프로그램에

require('gui/santa') 

시도 횟수/JS/GUI/GUI/santa.js 존재하지 않는. require()응용 프로그램에

require('./gui/santa') 

시도 횟수/JS/GUI/GUI/santa.js 존재하지 않는.

wtf

내 파일이 포함되어야받을 것으로 보인다 유일한 방법은 다음과 같이이다 : 가지 해결 이름의 목적과 baseUrl 설정을 패배

require('js/gui/santa.js') 

.


이 외에도 이상한 것들에서, 나는 baseUrlmain.js 내의 모든 require()에 대한 js/gui로 변경하고 싶습니다. 구성은 확장 가능하고 덮어 쓸 수 있어야합니다. 하지만 수행 할 때 main.js

requirejs.config({ 
    baseUrl  : 'js/layout' 
}); 

가 새로운 설정이 정치인처럼 무시하는 것 같다 자신의 약속을 무시합니다.

+0

이상한. 'require ('./ santa')'를'gui/main.js'에 넣었고'app.js'에 넣지 않았습니까? 그냥 IIRC 잘 작동합니다. – jgillich

+1

'main.js'에서'require' 시도를 1에서 5까지 번호 매김합니다. 1과 2가 발생하면 3과 4를 사용할 수 없습니다. (3은 1과 같지만 경로에 하나의'gui /'요소가 추가되어야합니다 .4는 동일한 추가로 2와 동일한 값으로 처리되어야합니다.) – Louis

+0

글쎄, 그렇게하지 않아야합니다. 'RequireJS'에 버그가 있습니다. [문제] (https://github.com/jrburke/requirejs/issues/1074)를 열었습니다. – Redsandro

답변

1

define instead of require을 사용해 보셨습니까?

정의

는 다음과 같이 호출 할 수 있습니다

define('folder/main', 
     [ "jquery", './AnotherModule' ], 
     function($, AnotherModule) {}); 

첫 번째 매개 변수는 모듈 이름입니다 - 모듈에 대한 명시 적 경로. 일반적으로 첫 번째 매개 변수는 포함하지 않습니다. - define()은 항상 암시 적으로 경로를 지정하며 일반적으로 명시 경로는 not recommended입니다.

반면 이름 매개 변수는 필요하지 않습니다.require는 모듈을 '생성'하거나 네임 스페이스를 정의하지 않기 때문에 require() 및 no define()을 사용하여 소스 파일에 상대적인 경로를 수행 할 수 없습니다. require() d가 루트에 상대적인 이어야합니다.

define()에 상대 종속성을 포함하면 (예 : './AnotherModule') 모듈 이름과 관련이 있습니다. 위의 경우 ./AnotherModule은/AnotherModule 폴더로 해석됩니다.

require() 호출에서 모듈 이름이이 아닙니다. 상대적인 종속성은 루트로 해석됩니다. 귀하의 경우에는


,이 require('santa')require('./santa')의 동작을 설명한다. gui가 같은 방식으로 작동하지 않는 이유에 대한 유일한 추측은 서브 디렉토리를 포함하고 있기 때문에 다르게 처리된다는 것입니다. 상황에 대해 더 많은 통찰력을 얻을 수 있는지 알아 보려면 require('strange-new-directory/santa')을 사용해보십시오.


은 base을 재설정에 관해서는, base을가, 내가 믿는, 글로벌 특성 및 중류 재설정 할 수 없습니다 (적어도 또는, 나는 그 일을 권하고 싶지 않다). define을 사용하여 상대 경로 지정을 수행 할 수 있어야합니다. 행운을 빕니다.

+0

'requirejs '에 대한 나의 이해가 정확하지 않거나 불완전하다. 내가 필요한 것들은'스스로 정의하는 모듈이다. 필자가 아는 한, 이것이 어떻게 이루어 졌는가, 그리고 의미론이 적절한 사용법을 나타낼 것이라면 그것이 작동해야하는 방식이다. 아니면 어떤 종류의 트릭/해킹에 대해 이야기하고 있습니까? – Redsandro

+0

require와 define의 차이는 경로 결정을 지정하는 방법과 관련이 있습니다. 여기에 자세히 설명 하겠지만, 링크 된 SO 질문에는 필요한 정보가 있습니다. – Chris

관련 문제