ng-annotate 错误与 Babel 和解构
ng-annotate error with Babel and destructuring
使用 Babel 转译为 ES6 时出现奇怪的错误,ng-annotate
不喜欢解构。我将我的源代码复制到在线 babel 编译器中,它工作正常。在我的 gulp 管道链中注释掉 ng-annotate
可以消除错误。删除文件中的 /* @ngAnnotate */
注释并手动注入也不会改变任何东西。
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'))
有问题的来源:
var [min, max] = values.map(val => +val);
// let/var doesn't make a difference.
ngModelCtrl.$modelValue = [min, max];
错误来自 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
有问题的函数:
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;
}
};
在上面的函数returns中注销key
和value
this:
undefined {
kind: 'var',
node: {
type: 'ArrayPattern',
start: 1178,
end: 1188,
loc: { start: [Object], end: [Object] },
range: [ 1178, 1188 ],
elements: [ [Object], [Object] ]
},
from: 1215
}
显然 key
参数未定义,但它为什么还要关心?
I have similar problem, I just simply changed the order in gulp pipe to:
babel --> annotate. ng-annotate does not support new JS versions: github.com/olov/ng-annotate/issues/237
最初由@illagrenan 在上面的评论部分回答
使用 Babel 转译为 ES6 时出现奇怪的错误,ng-annotate
不喜欢解构。我将我的源代码复制到在线 babel 编译器中,它工作正常。在我的 gulp 管道链中注释掉 ng-annotate
可以消除错误。删除文件中的 /* @ngAnnotate */
注释并手动注入也不会改变任何东西。
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'))
有问题的来源:
var [min, max] = values.map(val => +val);
// let/var doesn't make a difference.
ngModelCtrl.$modelValue = [min, max];
错误来自 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
有问题的函数:
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;
}
};
在上面的函数returns中注销key
和value
this:
undefined {
kind: 'var',
node: {
type: 'ArrayPattern',
start: 1178,
end: 1188,
loc: { start: [Object], end: [Object] },
range: [ 1178, 1188 ],
elements: [ [Object], [Object] ]
},
from: 1215
}
显然 key
参数未定义,但它为什么还要关心?
I have similar problem, I just simply changed the order in gulp pipe to: babel --> annotate. ng-annotate does not support new JS versions: github.com/olov/ng-annotate/issues/237
最初由@illagrenan 在上面的评论部分回答