2015-05-24 2 views
47

При развертывании моего Rails приложения я получаю следующее сообщение об ошибке:ExecJS :: ProgramError: Неожиданный токен Punc «(», как ожидается Punc «:» при выполнении скоса активов: PreCompile по производству

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) 

Файл в вопросе что он работает на localhost.Я также попытался запустить rake assests:precompile на localhost, все это прошло. Наконец, я попытался удалить содержимое из файла, git push и redeploy - все равно получил ту же ошибку. Только полностью удалив файл и повторно

Поблагодарили бы за любые идеи.

+0

Вы говорите о файле манифеста? PLS объяснить это ясно – Kamesh

+0

Нет, это не файл манифеста. Это файл .js, который включен в application.js с директивой // = require. – snitko

+0

Какой код CSS вызывает эту проблему? Можете ли вы его предоставить? Какую версию execjs вы используете? –

ответ

25

я подозреваю, в том, что JS-файла, у вас есть что-то вроде следующего:

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

Замена его с правильного формата,

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

работал для меня.

Ошибка ясно говорит, что это ожидает «:», но он нашел «(»

+0

Это была проблема для меня. Как и массивы, которые используют переменную с тем же именем, что и ключ: * Не используйте * '{id, content}' * Do use * '{id: id, content: content}' –

+1

Моя проблема была по умолчанию в функции: 'function test (param1 = 'val1', param2 = 'val1') {}'. Видимо, это только стало частью ES2015. –

5

Просто столкнуться с таким же вопросом

Моего случая кто-то используется синтаксис, который только поддержка, так как ES2015, бывший

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

в то время как это не поддерживается в нашей среде.

И сообщения об ошибках на самом деле генерируется Uglifer.

+0

да, это исправить, когда я получил ошибку на глотке - производство –

6

Я не уверен в вашей цепочке сборки, но я попал сюда, вставив одно и то же сообщение об ошибке в 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

+0

где это добавить? – Rhea

162

Here I found help for the same problem you had.

Run Рельсы консоли и:

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 делает проблему.

+1

Почему не просто 'uglify(). On (« ошибка », функция (ошибка) {console.log (ошибка);})'? Это даст вам все, что вам нужно ... – Cipi

+3

Это правильный ответ. Он найдет любые ошибки, которые у вас есть, независимо от того, являются ли они похожими на приведенные выше или нет. – creativereason

+0

@Cipi, где я могу запустить это? –

5

Я мог бы использовать https://skalman.github.io/UglifyJS-online/, чтобы определить правильный номер строки, где была проблема. К счастью, по крайней мере, правильный файл, который был вопрос был указан ворчанием уродовать

+0

Это действительно отлично подходит для меня, оно говорит мне, в какой строке есть ошибка. Спасибо! –

2

В моем случае проблема с определением функции, как,

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

Благодаря вышеприведенному определению функции я получаю ошибку, как это не поддерживается Uglifier. Параметры по умолчанию - это спецификация языка ES6/ES2015.

Для решения указанной задачи вы можете обратиться Set a default parameter value for a JavaScript function

0

Поскольку трассировка не предоставляет информации о поврежденном файле, для меня лучший способа определить ошибку, используйте git bisect.

Это позволяет найдите коммит, который вводит ошибку.

Давайте предположим, что вы на хозяине, сначала начать мерзавец разрез`ать:

$ git bisect start 
$ git bisect bad 

Затем вернитесь к предыдущей, рабочей ревизии, давайте предположим, что 20 редакции назад.

$ git checkout HEAD~20 

Вы запускаете ту же команду

$ RAILS_ENV=production rake assets:precompile 

Если он работает пометить ревизию, как хорошо:

$ git bisect good. 

мерзавец будет переходить к другой ревизии, запустить ту же команду снова (активы: precompile), и басированные на выходе отмечают его как хорошие/плохие.

Менее чем за 1 минуту вы сможете найти, что такое фиксация, которая ввела проблему.

Смежные вопросы