Подтвердить что ты не робот

ExecJS:: ProgramError: Неожиданный токен punc "(", ожидаемый punc ":" при запуске rake assets: прекомпиляция на производстве

При развертывании моего приложения 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)

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

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

4b9b3361

Ответ 2

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

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

Заменив его в нужном формате,

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

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

Ошибка явно говорит, что она ожидает ":", но она обнаружила "(".

Ответ 3

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

Ответ 4

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

Ответ 5

Просто встретите ту же проблему.

В моем случае используется синтаксис, который поддерживается только с ES2015, ex

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

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

И сообщения об ошибках фактически генерируются Uglifer.

Ответ 6

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

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

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

Для решения вышеуказанной проблемы вы можете ссылаться Установить значение параметра по умолчанию для функции JavaScript