Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Sencha Cmd - Общие вопросы (https://javascript.ru/forum/extjs/57598-sencha-cmd-obshhie-voprosy.html)

kolka 13.08.2015 09:42

Цитата:

Сообщение от nohuhu (Сообщение 383980)
Я не большой специалист в Cmd, но с ребятами общался на эту тему. Весь код JavaScript парсится, токенизируется лексером и превращается в AST дерево. Потом по нему проходятся оптимизатором, пылесосом и добавляют ложку дёгтя. В конечной стадии AST дерево форматируется обратно в JavaScript код. Здесь важно понимать, что текст скомпилированного кода не имеет прямого отношения к изначальному, он проходит через бинарную стадию и оригинальный исходник теряется. Поэтому форматирование неизбежно.



А и не найдёте. Есть несколько таких мест, в которых наш компилятор вставляет "лишние" точки с запятой. Причина проста, хотя и не очевидна: в JavaScript есть одна говнофича под названием Automatic Semicolon Injection. Это когда вы можете забыть точку с запятой в конце строки, а код вроде работает и всё какбэ хорошо.


Спасибо за развернутый ответ.
Очень полезно.

siber-biber 13.08.2015 10:21

Цитата:

Сообщение от nohuhu (Сообщение 383980)
А вообще до меня только что дошло - зачем вы вообще гоняете JSHint на сборке? Это боевой код, как правило минимизированный. Какая разница, как он выглядит?

Есть минимизированная сборка, а есть нет (debug версия используемая для разработки в том числе).. вот она и прогоняется через jshint чтоб еще раз убедиться в валидности кода.

nohuhu 13.08.2015 21:10

Цитата:

Сообщение от siber-biber (Сообщение 384031)
Есть минимизированная сборка, а есть нет (debug версия используемая для разработки в том числе).. вот она и прогоняется через jshint чтоб еще раз убедиться в валидности кода.

Кмк это избыточный шаг, я не вижу чем бы он мог быть полезен. Cmd парсит и разбирает весь JavaScript код в проекте, включая фреймворк и все сторонние библиотеки, буде таковые находятся. Если в коде есть синтаксические ошибки, парсинг провалится и на выход не поступит ничего. Если ошибок нет, то собранный код генерируется из AST дерева и гарантированно корректен - даже более корректен, чем исходный (см. выше).

Зачем тут дополнительный валидатор?

siber-biber 14.08.2015 06:13

Может и так.. мы перешли на современный вариант компиляций в sencha cmd буквально 2 недели как.. до последнего юзали старую форму запуска:
sencha build -p foo.jsb

а в том режиме никакой магии не происходило ..тупо конкатенация файлов. Поэтому некоторые вещи остались оттуда и еще будут пересмотрены..

jshint еще проверяет наличие забытых debugger ..и этим мы тоже пользуемся. sencha cmd это тоже делает при компиляции ..но выдает warning и успешно все компиляет чего нам не хотелось бы.
Ради одного поиска debugger конечно мы не оставим jshint в этом тесте...

nohuhu 14.08.2015 22:06

Cmd оставляет debugger в отладочных и тестовых сборках. При сборке в боевой код полученный файл прогоняется через YUI Compressor, который взрывается на debugger и сборка обламывается.

Так что спите спокойно. :)


Часовой пояс GMT +3, время: 19:28.