grunt-contrib-uglify выдает ошибку при использовании параметра функции со значением по умолчанию

Я использую Grunt 1.0.1 с grunt-contrib-uglify 2.0.0 для удаления связанных файлов .js моего проекта. Это работало нормально до сегодняшнего дня, когда я представил функцию JavaScript с параметром функции, который имеет значение по умолчанию.

Теперь задача Grunt приводит к следующему сообщению об ошибке:

Running "uglify:app" (uglify) task
JS_Parse_Error {
  message: 'SyntaxError: Unexpected token operator «=», expected punc «,»',
filename: 'app.js',

Строка app.js, о которой идет речь в этой задаче, выглядит следующим образом:

function addNumbers(a, b=1){
  console.log(a + b); 
}

где точный столбец в строке находится там, где нужно найти b=1.

Если я удалю значение по умолчанию, все снова будет работать нормально.

Почему grunt-contrib-uglify жалуется здесь? Как я могу решить эту проблему?


person Bunjip    schedule 26.09.2016    source источник


Ответы (1)


Судя по сообщению об ошибке, вы явно не используете ES6. То, как вы устанавливаете значение по умолчанию для b, будет работать только в ES6.

Вот что вы можете сделать, чтобы установить значение по умолчанию для b

function addNumbers(a, b) {
  b = b || 1;
  console.log(a + b); 
}

Если вы также хотите, чтобы b имело значение 0, вы можете проверить, является ли b undefined и || не number, чтобы установить значение по умолчанию для b в 1.

function addNumbers(a, b) {
  b = (b === undefined || typeof b !== 'number') ? 1 : b;
  console.log(a + b); 
}
person DavidDomain    schedule 26.09.2016
comment
Итак, как я могу заставить grunt-contrib-uglify использовать ES6, а не устаревшую спецификацию? Это вопрос версии node.js, которую я использую в своей среде разработки? Если да, то у меня v.4.5.0. - person Bunjip; 27.09.2016
comment
Я бы не считал это устаревшей спецификацией, но версия node.js имеет значение, когда речь идет о поддержке функций ES6, вы можете взглянуть на следующую таблицу Поддержка Node.js ES2015, особенно параметры функции по умолчанию, которые вы хотите использовать. Что вы можете сделать, так это добавить задачу в ваш файл grunt, который перенесет ваш ES6 в ES5. Вот подключаемый модуль grunt, который может сделать это за вас grunt-babel. - person DavidDomain; 27.09.2016