ExecJS::ProgramError: Unexpected token punc «(», expected punc «:» when running rake assets:precompile on production

34,497

Solution 1

Here I found help for the same problem you had.

Run rails console and:

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

It will show you the file and the line where the Uglifier is making the problem.

Solution 2

I suspect, in that js file, you have something like the following:

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

Replacing it with the right format,

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

worked for me.

Error is clearly saying, it's expecting ":" but it found "(".

Solution 3

Just encounter the same issue.

My case is someone used syntax that's only support since ES2015, ex

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

while this is not supported in our environment.

And the error messages is actually generated by Uglifer.

Solution 4

I'm not sure of your build chain, but I got here by pasting the same error message into Google.

That is called 'shorthand properties' in ES2015. I'm using Babel 6 with Gulp and needed to do an npm install babel-plugin-transform-es2015-shorthand-properties --save-dev and add that transform to my babel plugins.

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

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

Solution 5

I could use https://skalman.github.io/UglifyJS-online/ to identify the correct line number where the issue was. Thankfully, at least the correct file which had an issue was pointed out by grunt uglify

Share:
34,497
snitko
Author by

snitko

Updated on July 05, 2022

Comments

  • snitko
    snitko almost 2 years

    When deploying my Rails app I get the following error:

    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)
    

    The file in question is valid, it works on localhost. I also tried running rake assests:precompile on localhost, it all passes. Finally, I tried to remove the content from the file, git push and redeploy - still got the same error. Only completely removing the file and re-deploying helps.

    Would appreciate any ideas.