Я обновляю старый проект Rails и наткнулся на проблему после обновления Sprockets до версии 4.0.0 (было 3.7.2). Компиляция .js.jsx.coffee.erb
файлов теперь не удалась. Результирующий вывод содержит синтаксис jsx
в виде простого текста. то есть
Пример входного файла sample.js.jsx.coffee.erb
:
@Sample = createReactClass
render: ->
email = "<%= Rails.configuration.email %>"
`<div>{email}</div>`
Файл выглядит нормально, но в итоге получается:
Sample = createReactClass({
render: function() {
var email;
email = "test@example.com";
return <div>{email}</div>;
}
});
Браузер справедливо жалуется на <div>...
неверный синтаксис javascript.
Правильный вывод, который достигается в Sprockets 3.7.2
:
Sample = createReactClass({
render: function () {
var email;
email = "test@example.com";
return React.createElement("div", null, email);
}
});
Тот же файл правильно компилируется после удаления кода .erb
из файла и расширение изменилось на .js.jsx.coffee
. Возможно, препроцессор .erb
работает иначе, чем в предыдущей версии, создавая вывод, который препроцессор coffee
не может обработать?
Кажется, что часть jsx
во входном файле, содержащемся в backticks <div>...</div>
больше не корректно преобразуется в React.createElement(...)
. Любые предложения, как я могу решить это?