2013-10-03 2 views
5

저는 Wordpress와 함께 작업하고 선호하는 방식을 유지하기위한 방법을 설정하고 있습니다.Wordpress 내에서 requireJS 사용

큰 문제는 jquery를로드하는 방법입니다. Wordpress는 wp_enqueue_script를 통해 jQuery를로드하는데,이 방법은 일부 Wordpress 플러그인으로 정기적으로 사용해야하므로 jquery가 필요합니다. 그렇다면 requireJS 설정 내에서 두 번째 버전의 jQuery를로드하고 싶지 않습니다. 그래서, 어떤이 문제를보고 한 후 것은 내가 가지고 올 한 것입니다 :

템플릿/footer.php 그 다음되었습니다 경우 jQuery를 이미 페이지에 추가 된 경우보고

<script> 
if (typeof jQuery === 'function') { 
    define('jquery', function() { return jQuery; }); 
} 

require(['/assets/js/sample-common.js'], function (common) { 
    require(['sample-bootstrapper']); 
}); 
</script> 

그 그것을 모듈 값으로 설정합니다.

내 질문은 내가 그럼 그냥 지침을 글로벌 네임 스페이스로 jQuery를 떠나, 또는 따라야이다

http://requirejs.org/docs/jquery.html#noconflictmap

위의 문제는 아마 때로 믿을 수 JQuery와 플러그인을 포함 할 필요가있다 AMD와 호환이 가능한지 AMD와 호환되도록 노력할만한 가치가 있는지, 아니면 플러그인이 작동 할 수있게 해주는 글로벌 네임 스페이스에 'jQuery'를 유지하는 noConflict 선언에서 진실을 제거하려고 생각한 또 다른 해결책 이겠는가.

이것은 모범 사례 권장 사항에 대한 질문이나 질문이 아닙니다. 그리고 어떤 것이 많이 감사 될 것입니다!

감사합니다.

+0

아직 정의 할 필요없이 'jquery'를 필요로한다고 생각하십니까? – WraithKenny

답변

0

WordPress는 스크립트이기 때문에 jQuery를 대기열에 포함 시키므로 WordPress가 종속성을 정상적으로 처리 할 수 ​​있기 때문에 자신의 스크립트에 대해 동일한 작업을 수행해야합니다. 또한 WordPress의 번들 된 jQuery는 이미 플러그인 충돌을 막기 위해 noConflict() 모드로로드됩니다.

스크립트의 종속성 중 하나 인 jQuery를 지정하면 WordPress는 스크립트를 추가하는 모든 페이지에 추가합니다 (아직로드되지 않은 경우에만 해당). 두번째).

업데이트 : @brasofilo 주석에 따라 get_stylesheet_directory() 함수는 자식을 검색하고 자식에 일치하는 것이 없으면 부모를 검색합니다. 부모 및 자식 테마 상황 모두에서 get_stylesheet_directory()을 사용하는 것이 안전합니다.

는 WP의 사본에서 가져온 수정 : http://codex.wordpress.org/Function_Reference/wp_enqueue_script

/** 
* Proper way to enqueue scripts and styles 
*/ 
function theme_name_scripts() { 
    wp_enqueue_script('script-name', get_template_directory_uri() . '/assets/js/sample-common.js', array('jquery'), '1.0.0', true); 
} 

add_action('wp_enqueue_scripts', 'theme_name_scripts'); 

그것은 스크립트가 아이 테마 디렉토리에있는 경우 다음 get_template_directory_uri()을 교환하고 get_stylesheet_directory_uri()로 교체해야한다고 여기에서 주목할 가치가있다.

+1

'get_stylesheet_'는 자식을 검색합니다. 존재하지 않으면 부모를 검색합니다. 즉, 어떤 상황에서도 안전하게 사용할 수 있습니다. – brasofilo

+0

아마 내가 연결된 코덱스 페이지의'$ src' 매개 변수에 대한 섹션에서 주목해야합니다. @brasofilo를 지적 해 주셔서 감사합니다 :) –

+1

답변 해 주셔서 감사합니다. 나는 아마 모든 내 스크립트 로딩을 위해 wp_enqueue_script를 고수해야한다고 생각하지만 requireJS를 고집하는 것을 선호한다. Wordpress 외부에서 코드를 작성하고 WP로 통합하기 전에 템플릿을 빌드 할 때 리팩터링하지 않으려 고한다. 적합 할 코드. – FlimFlam

관련 문제