ExecJS::ProgramError: SyntaxError: Unexpected token: name <ClassName>

Posted

技术标签:

【中文标题】ExecJS::ProgramError: SyntaxError: Unexpected token: name <ClassName>【英文标题】: 【发布时间】:2017-02-20 13:14:37 【问题描述】:

我创建了一个 javascript 类(命名为 BarChart),它具有构造函数和几个 init 方法。

我执行了下面的命令来为生产环境预编译资产,但出错了。

用于预编译资产的命令:rake assets:precompile RAILS_GROUPS=assets --trace

错误回溯:

rake aborted!
ExecJS::ProgramError: SyntaxError: Unexpected token: name (BarChart) (line: 24472, col: 6, pos: 952834)

Error
    at new JS_Parse_Error (<eval>:3623:11948)
    at js_error (<eval>:3623:12167)
    at croak (<eval>:3623:22038)
    at token_error (<eval>:3623:22175)
    at unexpected (<eval>:3623:22263)
    at semicolon (<eval>:3623:22781)
    at simple_statement (<eval>:3623:25959)
    at <eval>:3623:23747
    at <eval>:3623:22954
    at <eval>:3624:3759
    at Object.parse (<eval>:3624:3999)
    at parse (<eval>:3958:22)

抛出错误的Javascript类写成这样:

class BarChart

    // code goes here

我在 Gemfile 中添加了 therubyracerexecjs gem。

Ruby: 2.2.5

Rails: 3.2.2`

PS:我在 SO 中检查了几个此类问题,但没有一个问题与 JavaScript class 相关。

【问题讨论】:

似乎有两个请求结束问题。有人可以解释一下close问题请求的原因吗?我还没有发现 JS 类相关的问题。 我投票决定关闭它,因为我不明白 - 我不清楚。想象自己站在一个对你的问题毫无头绪的人的位置上,并以一种人们可以理解的方式描述它。您对问题的描述越好(不要与“越多”混淆),获得正确答案的机会就越大。 查看此链接。希望这会帮助你。 academytimes.com/solved/7392211522/… @CodeLღver 感谢您的回答,但我已经检查过了,它并没有解决我的错误。 @AndreyDeineko 我已经更新了问题,请检查。顺便说一句,感谢您提供结束问题的原因。 【参考方案1】:

在您的 BarChart js 文件中,将所有 let 更改为 var。 那么预编译应该会成功。

【讨论】:

【参考方案2】:

我在 ES6 中编写了 JavaScript,rails 3 显示错误,而 ES6 代码。在rails中使用ES6的所有方法都不适用于rails 3。所以我将ES6转换为ES5代码。

【讨论】:

rails,还是用 es5 :( 不,您可以在 Rails 5 及之后使用 ES(6/7) 语法。 我不能,例如使用let 将不起作用。导轨 6.0.0.1。 ExecJS 编译器。【参考方案3】:

在 rails 5 中,我解决了将文件从 .js 重命名为 .js.es6 的问题。奇怪的是,我的暂存部署有效,而我的生产部署却没有。

【讨论】:

以上是关于ExecJS::ProgramError: SyntaxError: Unexpected token: name <ClassName>的主要内容,如果未能解决你的问题,请参考以下文章

Pages#home 中的 Rails ExecJS::ProgramError?

ExecJS :: ProgramError:运行rake资产时意外的标记点«(»,预期的点«:»:在生产中进行预编译

ExecJS::ProgramError: SyntaxError: Unexpected token: name <ClassName>

如何调试资产提示语法错误?

关于syn/ack攻击,如何消除阿?!

SYN攻击