ExecJS :: ProgramError:运行rake资产时出现意外的令牌punc«(»,expected punc«:»:预编译生产

部署我的Rails应用程序时,出现以下错误:

rake aborted! ExecJS::ProgramError: Unexpected token punc «(», expected punc «:» (line: 15, col: 14, pos: 265) Error at new JS_Parse_Error (/tmp/execjs20150524-4411-1p45n63js:2359:10623) at js_error (/tmp/execjs20150524-4411-1p45n63js:2359:10842) at croak (/tmp/execjs20150524-4411-1p45n63js:2359:19086) at token_error (/tmp/execjs20150524-4411-1p45n63js:2359:19223) at expect_token (/tmp/execjs20150524-4411-1p45n63js:2359:19446) at expect (/tmp/execjs20150524-4411-1p45n63js:2359:19584) at /tmp/execjs20150524-4411-1p45n63js:2359:28513 at /tmp/execjs20150524-4411-1p45n63js:2359:19957 at expr_atom (/tmp/execjs20150524-4411-1p45n63js:2359:27269) at maybe_unary (/tmp/execjs20150524-4411-1p45n63js:2359:30019)new JS_Parse_Error ((execjs):2359:10623) js_error ((execjs):2359:10842) croak ((execjs):2359:19086) token_error ((execjs):2359:19223) expect_token ((execjs):2359:19446) expect ((execjs):2359:19584) (execjs):2359:28513 (execjs):2359:19957 expr_atom ((execjs):2359:27269) maybe_unary ((execjs):2359:30019) 

有问题的文件是有效的,它在本地主机上工作。 我也尝试运行rake assests:precompile本地主机上的rake assests:precompile ,它都通过。 最后,我试图从文件中删除内容,git push并重新部署 – 仍然有同样的错误。 只有彻底删除文件和重新部署的帮助。

将不胜感激任何想法。

在这里,我find了同样的问题的帮助。

运行rails控制台和:

 JS_PATH = "app/assets/javascripts/**/*.js"; Dir[JS_PATH].each do |file_name| puts "\n#{file_name}" puts Uglifier.compile(File.read(file_name)) end 

它会显示你的文件和Uglifier所在的问题。

我怀疑,在这个js文件中,你有如下的东西:

 var User = { getName() { alert("my name"); } } 

用正确的格式replace它,

 var User = { getName: function() { alert("my name"); } } 

为我工作。

错误显然是说,它期待“:”,但它发现“(”。

我不确定您的构build链,但是我通过将相同的错误消息粘贴到Google来到此处。

这在ES2015中被称为“速记属性”。 我正在使用Babel 6和Gulp,需要做一个npm install babel-plugin-transform-es2015-shorthand-properties --save-dev然后将这个转换添加到我的babel插件中。

 .pipe(babel({ plugins: [ 'transform-es2015-shorthand-properties' ] })) 

https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-shorthand-properties

我可以使用https://skalman.github.io/UglifyJS-online/来确定问题所在的正确行号。; 谢天谢地,grunt uglify指出了至less正确的文件有问题

只是遇到同样的问题。

我的例子是使用自ES2015以来唯一支持的语法,例如

 function someThing(param = true) { // do something here }; 

而这在我们的环境中不受支持。

而错误信息实际上是由Uglifer生成的。

在我的情况下,function定义的问题,

 function someFunctionName(param1, param2=defaultValue){ //code } 

由于上面的函数定义,我得到错误,因为它不受Uglifier支持。 默认参数是ES6 / ES2015语言规范。

为了解决上述问题,您可以参考设置JavaScript函数的默认参数值