Кофе ExecJS script, не отображающий номера строк для ошибок компиляции (конвейер Rails)
В одном из моих приложений Rails ExecJS не отображает номера строк для ошибок компиляции coffeescript. Мое сообщение об ошибке компиляции будет выглядеть так:
ExecJS::RuntimeError in Referrals#new
Showing ~/MyApp/app/views/layouts/application.html.erb where line #6 raised:
SyntaxError: unexpected IDENTIFIER
(in ~/MyApp/assets/javascripts/utils.js.coffee)
Обратите внимание, что для источника кофе script нет номера строки (строка №6 для файла erb).
В другом одном из моих приложений, где я все еще получаю номера строк, синтаксическая ошибка выглядит так:
ExecJS::ProgramError in Projects#show
Showing ~/OtherApp/app/views/layouts/application.html.erb where line #17 raised:
Error: Parse error on line 6: Unexpected 'STRING'
(in ~/OtherApp/app/assets/javascripts/projects.js.coffee)
Итак, кажется, что разница в том, что ExecJS::ProgramError
даст мне номера строк, где ExecJS::RuntimeError
не будет.
Кто-нибудь знает, как вернуть номера строк? Почему мое приложение создает RuntimeErrors для компиляции кофейных активов, а другое - ProgramErrors? Я проверил Rails, и они, похоже, совпадают.
Обратите внимание, что если я исправляю ошибки компиляции, приложение работает нормально (например, файлы кофе действительно компилируются), но было бы неплохо, если бы эти номера строк указывали мне на ошибки компиляции! /p >
ИЗМЕНИТЬ
Я понял, что независимо от того, выглядит ли это ExecJS Runtimeerror
или ProgramError
, в первом приложении никогда не указывается номер строки, а во втором - всегда.
Ответы
Ответ 1
Я понял, это из-за версии coffee-script-source
gem. В приложении, в котором указывались номера строк, bundle show
дает кофе script - источник 1,4.0, тогда как в другом приложении была версия для кофе script версии 1.6.1.
Я этого не заметил, потому что камень coffee-rails
не сильно определяет эту зависимость (в обоих моих Gemfiles я использовал gem 'coffee-rails', '3.2'
). Чтобы обойти это, просто укажите версию кофе-script -source gem version:
gem 'coffee-rails', '3.2.2'
gem 'coffee-script-source', '1.5.0'
и bundle update coffee-script-source
.
Надеюсь, это поможет любому, кто может столкнуться с этим несоответствием.
Ответ 2
Это также можно зафиксировать с помощью этого патча, который вставляет строку в сообщение об ошибке для драгоценного камня ruby-coffee-script
.
Если вы используете исходные карты, этот патч исправляет камень coffee-rails-source-maps
.