2009-11-09 6 views
4

google closure-compiler을 테스트 중이며 facebox Plugin을 "고급"옵션으로 컴파일하려는 경우 "a.H"를 찾으려고 할 때 오류가 발생합니다.google closure jQuery 플러그인을 컴파일하십시오

누구나이 옵션을 사용하여 jQuery 플러그인을 컴파일하려고 시도 했습니까?

감사합니다.

EDIT : 분명히이 재 명명 JQuery와 방법하지만 jQuery를 포함하는 모든 방법이 동일하게 이름을 다시 할 수있다? 옵션 "externs_url"와 코드

EDIT

예 : 코드 OUPUT

with closure-compiler

JS 입력 코드

// ==ClosureCompiler== 
// @output_file_name default.js 
// @formatting pretty_print 
// @compilation_level ADVANCED_OPTIMIZATIONS 
// @warning_level QUIET 
// @externs_url http://code.jquery.com/jquery-1.5.min.js 
// ==/ClosureCompiler== 

// ADD YOUR CODE HERE 

var test = function($, context) { 

    var 
    _self = this; 

    _self.mymethod = function() { 

    var lista = $("a", context); 

    lista.attr("target", "_blank"); 

    return lista.html(); 

    }; 


    return {"mymethod":_self.mymethod}; 

}.call({}, jQuery, context);  

JS

+1

이것은 SOOO와 유사하며 http://code.jquery.com/jquery-1.5.min.js를 http://closure-compiler.googlecode.com/svn/trunk/contrib/externs/jquery-로 변경하면됩니다. 1.5.js이고 작동합니다. 나는 이미 아래의 externs 대답에 대해 언급했다. – Gabe

답변

4

jQuery 플러그인의 사용자 지정 JS 라이브러리를 압축하려고 할 때 동일한 문제가 발생했습니다. 클로저 (플러그인을 사용하지 않을 이유가 없다면) 플러그인 내에서 jQuery 라이브러리 호출의 이름을 바꿉니다. 더 나쁜 것은 아직 경고하지도 않을 것입니다 (어떻게 할 수 있습니까? 프로그래머가 무엇을하고 있는지를 알고 있다고 가정합니다!) 해결책은 외부 js 파일 (또는 url이 라이브러리를 가리키는 것)을 참조하는 것입니다., 내가 성공적으로 파일을 컴파일 할 수 있었다 fowlloing 프리앰블을 적용하여 http://closure-compiler.appspot.com/home

: 나는 웹 도구를 사용하여

컴파일러를 만들고 남은 유일한 문제는 플러그인 이름이되지 않을 수 있다는 걸
// ==ClosureCompiler== 
// @compilation_level ADVANCED_OPTIMIZATIONS 
// @warning_level QUIET 
// @output_file_name default.js 
// @formatting pretty_print 
// @externs_url http:// ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js 
// @externs_url http:// ajax.googleapis.com/ajax/libs/jqueryui/1.8.0/jquery-ui.js 
// ==/ClosureCompiler== 

단순화 :

(function($) { $.fn.extend({ <name>:function(options) { } }); })(jQuery); 

이것은 세계에 노출 된 이름이기 때문에 어떤 아이디어?

+2

가까웠지만 자바 스크립트를 통해 라이브러리 js 파일을 전달하지 않으면 http : // ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery 대신 externs 파일을 전달해야합니다. js는 http://closure-compiler.googlecode.com/svn/trunk/contrib/externs/jquery-1.4.3.js를 사용합니다. http://stackoverflow.com/questions/2226298/using에서 좀 더 완전한 글을 쓸 수 있습니다. -google-closure-compiler/7291380 # 7291380 – Gabe

+0

게시 한 코드가 제대로 작동하지만 "warning_level QUIET"을 설정하면 코드를 컴파일 할 때 많은 문제가 누락됩니다. 라이브러리가 필요하다는 것을 깨닫지 못했습니다. 파일을 열어 모든 내보내기를 찾으십시오. – Gabe

1

클로저 컴파일러를 사용하여 액세스 한 함수의 이름을 변경했습니다. 예를 들어 $.each(// code)을 사용했을 때 컴파일러는 $.a(// code)으로 변경했습니다. 나는 네 문제가 있다고 믿는다.

+0

네,하지만 그 문제를 해결할 수 있습니다. jQuery를 포함하고 있기 때문에 실패합니다. –

0

모든 스크립트가 모든 스크립트에서 작동하려면 애플리케이션 내에 모든 스크립트를 포함시켜야한다고 생각합니다.

1

예, 당신은 둘 jquery.js 하나 개의 파일에 plugin.js을 연결해야하지만, 그 순간에 jQuery를의 일부는 고급 컴파일 옵션을 제대로 압축하지 않습니다,하지만 당신은 할 수 여전히 간단한 편집을 사용하십시오.

jQuery 팀이 고급 컴파일 옵션을 사용하여 컴파일 할 수있는 버전을 곧 출시 할 예정입니다.

고급 편집에 대한 질문이 있으시면 tutorials을 확인하십시오. em을 읽은 후에는 고급 컴파일을 사용하여 오류없이 컴파일 할 수있는 일부 부품이 필요한 이유를 알 수 있습니다.

+0

@Maiku Mori 감사합니다. 튜토리얼을 따라 더 많은 옵션을 살펴 보겠습니다. jQuery와 함께 jQuery.min을 사용합니다. [ "Method"]를 사용하여 고급 컴파일로 스크립트를 컴파일하는지 확인하십시오. –

+0

죄송 합니다만 "externs_url"옵션을 사용하면이 작업을 수행 할 수 있습니다. –

4

고급 옵션을 사용하여 jQuery 플러그인을 올바르게 컴파일하려면 소스 코드를 약간 수정해야합니다. 모든 외부 함수는 도트 구문 대신 인용 문자열을 사용해야합니다. 이렇게하면 클로저 컴파일러가 외부 함수 이름을 보존합니다. 예를 들어;

$.fn.pluginName = function(opts) { 
    // plugin code 
} 

꽤 쓸모가

$.a.b=function(){}; 

로 컴파일됩니다. 그러나, 당신은 소스 좀

$.fn['pluginName'] = function(opts) { 
    // plugin code 
} 

가 출력이

$.a.pluginName=function(){}; 

훨씬 더를 변경하는 경우!

5

jQuery 라이브러리 자체는 can't be compiled with ADVANCED_OPTIMIZATIONS이지만 전체 jQuery API를 지정하는 클로저 컴파일러 externs 파일을 사용하여 고급 최적화를 사용하여 자신의 코드를 컴파일 할 수 있습니다. Closure Compiler repository에서 jQuery 버전과 관련된 externs 파일을 다운로드하십시오.

java -jar compiler.jar \ 
--compilation_level ADVANCED_OPTIMIZATIONS \ 
--externs jquery-1.4.3.externs.js \ 
--js_output_file output.js \ 
application.js 

externs : 예, 나는 다음은 응용 프로그램의 코드가 application.js에 있으며 compiler.jar은 (this zip file에서 사용 가능) 구글 폐쇄 컴파일러 jar 파일이라고 가정 버전 1.4.3

를 사용합니다 파일은 Closure Compiler에게 jQuery 메소드가 존재하여 이름을 변경하지 않는다는 것을 알려줍니다.

관련 문제