2011-02-01 3 views
20

프로젝트에서 requirejs를 처음 사용하고 있습니다. 이미 제 위치에 많은 자바 스크립트가있는 환경에서 작업하고 있으며 제 코드를 소개 할 수있는 명확한 방법을 찾고 있습니다.require js와 jquery를 사용하여 글로벌 jquery를 clobbering하지 않습니까?

내가 겪고있는 문제는 jQuery를로드 할 수있는 모듈을 찾을 수없는 것입니다. 기존의 jQuery를 손상시키지 않습니다.

심지어 require-jquery.js도 jQuery의 글로벌 버전을 도입한다는 사실에 놀랐습니다. 전역 변수를 추가하지 않고 jQuery를 모듈로로드 할 수 있습니까?

답변

24

jQuery를 1.7를 손상하지 않고 로컬 jQuery을 확장 할 수 있도록 .sub을 사용할 수있는 것은 AMD의 로딩을 지원합니다. 그러나 jQuery는 자체 모듈 이름을 'jquery'로 하드 코딩하기 때문에 모듈 명명 ​​충돌을 피할 수 있습니다. 다른 모듈을 'jquery'(예 : requirejs 구성의 'paths'속성)로 정의하면 충돌이 발생합니다.

는 'JQuery와 로더'와 같은 모듈을 정의, 당신의 requirejs 응용 프로그램 범위에 jQuery를로드하려면 당신이 jQuery를로드 할 때, 'JQuery와 로더'를 통해 그것을 수행

define(['path/to/jquery.min'], function() { 
    return jQuery.noConflict(true); 
}); 

requirejs 것 noconflict가 jquery-loader가 처음로드 될 때만 실행되도록 jQuery에 대한 참조를 '캐시'합니다.

3

여러 버전이 나쁘다합니다. 해킹을 중지하고 jQuery를 업그레이드하거나 이전 버전을 사용하십시오. 당신이 이전 jQuery 변수를 교체하고 전 세계적 것을 파괴되지 않습니다 true.noConflict에 전달하면

(function($) { 
    // requirejs inclusion block for loading 


}(jQuery.noConflict(true)); 

을 시도 안전 $ 유지에 관해서는

.

즉, 조용히 전달할 수 있습니다. 당신이 그런 다음 폐쇄에 로컬 $로 1.5 jQuery를 글로벌 공간에 다시 1.2 $ & jQuery을 넣어 당신에게 줄 것입니다 위의 코드를 사용하여

<script src="jquery-1.2"> 
<script src="jquery-1.5"> 

이 말

다시 나는 사용 AGAINTS 조언 그것 때문에 여러 번 버전 엉망으로 유지 보수 악몽. 당신은 1.5을 사용하는 경우

당신은 또한 당신이 세계 jQuery

+1

여러 버전에 대한 좋은 조언 ...하지만 패키지 라이브러리와 함께 제공되는 일부 CMS 플러그인이 있습니다. 3 + jQuery/cms가 섞인 프로토 타입 버전이있는 페이지를 보았습니다. - YUI의 버전 관리 접근 방식에 가까운 솔루션이 있는지 궁금합니다. – mfeineis

+9

여러 버전을 하나씩로드하는 것 외에 다른 이유로 인해 필요한 이유가 있습니다. 페이지. 타사 JS 앱을 개발 중이라면 알 수없는 환경에서 실행됩니다.소비자 페이지를 clobbering하지 않고도 필요한 jQuery 버전을 신뢰할 수 있어야합니다. –

+1

@RamenRecon "타사 JS 앱 개발" ""jQuery "LOLOLOLOLOLOLOLOLOLOL이 필요합니다. – Raynos