2016-09-08 8 views
0

Я пытаюсь скомпилировать весь исходный код на моем веб-сайте, загружаемый при запуске в один файл. Некоторый код загружается с использованием $.getScript, поэтому мне нужно уметь оставлять доступ к jQuery и нескольким другим функциям. Ниже я это сделал. Что я делаю не так?Как использовать компилятор закрытия google для сжатия кода из внешнего скрипта

Я прочитал учебник Google по адресу: https://developers.google.com/closure/compiler/docs/api-tutorial3 Чтобы проверить это, я попытался сжатия JQuery 3.1.0 удалить все, но show и hide поэтому я приложил следующее к концу.

window['jQuery'] = window['$'] = jQuery; 
jQuery.prototype['hide'] = jQuery.prototype.hide; 
jQuery.prototype['show'] = jQuery.prototype.show; 

Я скомпилирован с помощью

java -jar compiler.jar --js_output_file all.js --compilation_level ADVANCED --create_source_map all.map --js _common/jquery/js/jquery-3.1.0.js

и добавил //# sourceMappingURL=/all.map к концу outputed файла.

Для тестирования я создал простую веб-страницу

<html> 
    <head> 
     <script src="/all.js"></script> 
    </head> 
    <body> 
     <div id="a1" onclick="$.hide('#a1');">a1</div> 
     <div id="a2" onclick="$.hide('#a2');">a2</div> 
     <div id="a3" onclick="$.hide('#a3');">a3</div> 
     <div id="a4" onclick="$.hide('#a4');">a4</div> 
    </body> 
</html> 

Когда я запускаю это я получаю следующие ошибки в консоли.

jquery-3.1.0.js:7441 Uncaught TypeError: Cannot read property 'source' of undefined 
jquery-3.1.0.js:3853 Uncaught TypeError: Za.ga is not a function 
test.html:8 Uncaught ReferenceError: $ is not definedonclick @ test.html:6 

Я делаю что-то неправильно или это за пределами возможностей компилятора закрытия Google. Я не возражаю против использования другого minifier, если я могу запустить его с php, используя shell_exec

+0

Насколько я знаю, jQuery не является внутренне аннотированным для компилятора замыкания, поэтому это будет не просто так просто. Почему бы просто не заменить немного jQuery, что вам нужно? –

+0

Это всего лишь пример. Я хочу добавить несколько своих собственных сценариев. Компилятор работает до тех пор, пока я использую базовое сжатие, но было бы неплохо получить расширенную работу –

+0

для самого jQuery. Хотелось бы, чтобы я знал, как экспортировать все. Это мой собственный код, который я хочу ограничить несколькими функциями. –

ответ

0

Любой скрипт, включенный в качестве источника в компиляции ADVANCED, должен быть полностью совместим с режимом ADVANCED компилятора. jQuery нет.

Нет простого способа сделать его совместимым. Он нарушает слишком много the assumptions, сделанных компилятором для режима ADVANCED.

+0

Можно ли просто сделать 1 файл в простом режиме, но остальная часть моего кода в расширенном ? –

+0

Да. Используйте [соответствующий jQuery extern] (https://github.com/google/closure-compiler/tree/master/contrib/externs), чтобы сообщить компилятору, что символы jQuery определены извне. –

+0

Не можете найти один для 3.1 –