ngAnnotate - Предупреждение: ожидаемый строковый ключ StringMap
Я получаю это предупреждение при использовании Grunt и grunt-ng-annotate.
В предупреждении нет ссылки на то, где находится ошибка в файле, что затрудняет ее отладку.
Есть идеи?
4 ответа
Проблема оказалась в использовании обозначения ES6, в данном случае функций стрелок (=>), параметров по умолчанию и let.
Я не посмотрел подробно, почему ngAnnotate не поддерживает это.
Чтобы выяснить, где были проблемы, я переопределил предупреждение ngAnnotate с помощью grunt switch --force и позже в сборке uglify пожаловался на синтаксис ES6 с более подробной информацией.
Возможные причины:
() => {}
{ value }
let
function (...args)
function (defaultVar = false)
Решения:
function () {}
{ value: value }
var
function (args)
function (defaultVar) { defaultVar = (defaultVar === undefined) ? false : defaultVar }
Я также столкнулся с той же проблемой, но в моем случае была другая проблема.
Один из членов нашей команды инициализировал параметр функции некоторым значением по умолчанию. Что-то вроде следующего.
$scope.functionName = function(defaultVar = false){
//some code
}
и в моем сценарии глотка была строка
.pipe(plugins.if(release, plugins.ngAnnotate()))
Поэтому, когда я удалил эту строку, скрипт сборки автоматически распечатал ошибку в консоли, указывая точный файл и номер строки, в которой была ошибка.
Наконец, я смог решить эту проблему, удалив этот код инициализации переменной.
Надеюсь, это поможет кому-то...
Я также столкнулся с аналогичной проблемой, вызванной назначением деструктурирования:
// the following line broke the build
const { name, gender, yearOfBirth, occupation } = profile;