2012-07-27 2 views
1

나는 다양한 사이트에서 호스팅되어야하는 Javascript 응용 프로그램을 작성하고 있습니다. 응용 프로그램 자체는 jQuery 및 jQuery UI를 사용합니다. 나는 jQuery.noConflict(true) 트릭을 알고 있으며, 현재 그것을 사용하여 지구 공간을 오염시키지 않습니다. 내 목표는 항상 내 애플 리케이션에 jQuery와 그 플러그인 중 하나를 유지하여 호스팅 사이트의 어떤 것과도 충돌하지 않도록하는 것이다. 호스팅 사이트에서 자체 jQuery (다른 버전 일 수도 있음)를로드하고 플러그인을 추가 할 수 있어야합니다.외부 종속성이있는 AMD 모듈로 Javascript 응용 프로그램

이제 앱을 AMD 모듈로 구성하고 싶습니다. AMD 로더 (require.js, curl 등)를 사용하려면 호스팅 사이트에서 요구하는 것이 좋지만 어떤 특정 요구 사항을 원하지는 않을 것입니다. AMD API를 준수하는 것만 있으면됩니다 (예, 알고 있습니다. 아직 100 % 준비되지 않음).

모두 가능합니까? 호스팅 사이트에서 다음과 같이 사용할 수 있도록 상호 운용 할 수 있습니까? requirejs, curl 또는 Dojo AMD 로더 중 하나입니까? 이와 예를 들어

:

define(['jquery'], function($) { 
    var myLocaljQuery = $.noConflict(true); 

    ... my app module implementation here ... 

}); 

어떻게 내 응용 프로그램을 사용하기를 원하는 jQuery를위한 경로를 지정할 수 있습니다? 지금까지 내가 이해,이 같은 아무것도 할 수 없습니다 :

require.config({ 
    paths: { 
     'jquery' : 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min' 
    } 
}); 

define(['require'], function(require) { 
    require(['jquery'], function($) { 
     var myLocaljQuery = $.noConflict(true); 

     ... my app module implementation here ... 
    }); 
}); 

을 처음 require는 전역 객체이며,이 requirejs 특정 때문이다.

답변

0

더 많은 조사를 한 후에는 현재로서는 실현 가능하지 않다고 생각합니다. 적어도 한 가지 - 모듈 ID는 AMD 컨텍스트 내에서 전역이므로 내 응용 프로그램에서 "jquery"또는 "jquery-ui"모듈 ID를 단순히 사용할 수 없으며 누군가 내 응용 프로그램을 호스팅 할 때 충돌이 없어야합니다 AMD를 통해 jQuery (잠재적으로 다른 버전)를 사용하려고합니다. 예를 들면 here을보십시오 :

curl.js는 AMD 모듈로 다른 버전의 jQuery를로드 할 수있는 타사 스크립트와의 충돌을 방지하지 않습니다.

내가 이해하는 한, AMD는 자신의 응용 프로그램 내에서 모듈화를 목표로합니다. 충돌을 피하기 위해 캡슐화를 원할 때가 아니라 적어도 타사 앱과의 통합에 대한 지원은 많지 않습니다.