在heroku部署上导致资产预编译失败的代码段

时间:2016-06-04 17:06:49

标签: ruby-on-rails ruby heroku rake precompile

我试图将一个rails / react应用程序部署到Heroku,但我的rake资产:由于意外令牌(>),预编译一直失败。我已将其缩小到这个快速修复程序,以确保路由更改时路由器的反应路由器滚动到页面顶部(当我将其注释掉时,应用程序部署正常,但是当我将其重新插入时,预编译失败)。

有人可以帮我理解为什么这段代码会导致预编译失败?我认为它与箭头操作符有关,但我真的不明白它是如何工作的。与此同时,我将学习它的作用,以便我可以尝试重新创建它,但我真的很想理解为什么这不适合将来参考。谢谢!

以下是导致问题的代码段:

browserHistory.listen(location => {
  setTimeout(() => {
    if (location.action === 'POP') {
      return;
    }
    window.scrollTo(0, 0);
  });
});

这里是堆栈跟踪的顶部:

remote: -----> Preparing app for Rails asset pipeline
remote:        Running: rake assets:precompile
remote:        rake aborted!
remote:        ExecJS::ProgramError: Unexpected token: operator (>) (line: 11668, col: 33, pos: 318450)
remote:        Error
remote:        at new JS_Parse_Error (/tmp/execjs20160604-553-1fg4s41js:3572:11870)
remote:        at js_error (/tmp/execjs20160604-553-1fg4s41js:3572:12089)
remote:        at croak (/tmp/execjs20160604-553-1fg4s41js:3572:20898)
remote:        at token_error (/tmp/execjs20160604-553-1fg4s41js:3572:21035)
remote:        at unexpected (/tmp/execjs20160604-553-1fg4s41js:3572:21123)
remote:        at expr_atom (/tmp/execjs20160604-553-1fg4s41js:3572:29660)
remote:        at maybe_unary (/tmp/execjs20160604-553-1fg4s41js:3573:143)

1 个答案:

答案 0 :(得分:1)

这是箭头函数语法。重写代码片段解决了问题。我不确定它为什么不喜欢箭头函数语法,但这让它很开心。

browserHistory.listen(function(location) {
  setTimeout(function() {
    if (location.action === 'POP') {
      return;
    }
    window.scrollTo(0, 0);
  });
});