javascript angularjs babeljs destructuring ng-annotate

javascript - Error de anotación con Babel y desestructuración.



angularjs babeljs (1)

Tengo un problema similar, simplemente cambié el orden de gulp pipe a: babel -> anotar. ng-annotate no admite nuevas versiones de JS: github.com/olov/ng-annotate/issues/237

Originalmente respondido por @illagrenan en la sección de comentarios de arriba

Error extraño al hacer la transcripción a ES6 con Babel, a ng-annotate no le gusta la desestructuración. Copié mi fuente en el compilador de babel en línea y funciona bien. Comentando ng-annotate en mi trago cadena de cadenas se deshace del error. Eliminar el /* @ngAnnotate */ comentario en el archivo e inyectarlo manualmente tampoco cambia nada.

Sección Gulp:

return gulp.src(config.scripts.app) .pipe(changed(config.dist + ''/scripts'')) .pipe(plumber()) .pipe(annotate()) // Filter out and transpile only .es6.js files .pipe(es6) .pipe(babel({ presets: [''es2015''], plugins: [''extensible-destructuring''], comments: false })) .pipe(es6.restore) .pipe(concat(''scripts.js'')) .pipe(gulp.dest(config.dist + ''/scripts''))

Fuente en cuestión:

var [min, max] = values.map(val => +val); // let/var doesn''t make a difference. ngModelCtrl.$modelValue = [min, max];

El error proviene de una dependencia en ng-annotate :

Error: StringMap expected string key at stringmap.set (/Users/macbookair/Places/app/places/frontend/node_modules/gulp-ng-annotate/node_modules/ng-annotate/node_modules/stringmap/stringmap.js:101:19) at Scope.add (/Users/macbookair/Places/app/places/frontend/node_modules/gulp-ng-annotate/node_modules/ng-annotate/build/es5/scope.js:102:17) at /Users/macbookair/Places/app/places/frontend/node_modules/gulp-ng-annotate/node_modules/ng-annotate/build/es5/scopetools.js:38:25 at Array.forEach (native) .... more

stringmap.js función stringmap.js en cuestión:

stringmap.prototype.set = function(key, value) { if (typeof key !== "string") { throw new Error("StringMap expected string key"); } if (key === "__proto__") { this.hasProto = true; this.proto = value; } else { this.obj[key] = value; } };

La key y el value cierre de sesión en la función anterior devuelve esto:

undefined { kind: ''var'', node: { type: ''ArrayPattern'', start: 1178, end: 1188, loc: { start: [Object], end: [Object] }, range: [ 1178, 1188 ], elements: [ [Object], [Object] ] }, from: 1215 }

Claramente, el argumento key no está definido, pero ¿por qué le importa?