我有一个非常奇怪的错误。我正在尝试调试为什么我不能让这个模块es6-error与babel 6一起工作。测试仍然失败。其中一个测试非常简单,自定义错误的实例应该是一个错误。这两个都应该是app ~ HandlerT App IO
。
true
以下是jsbin上完全相同的console.log(err instanceof Error)
console.log(err instanceof ExtendableError)
代码的示例,其中两个日志都返回src
。
如果将该代码放入一个节点文件并运行它,则会出现相同的行为。
很明显,测试失败的原因是模块导入不正常,这奇怪地失败了。
true
为什么当import ExtendableError from './index'
var b = new ExtendableError();
console.log(b instanceof ExtendableError) // false
console.log(b instanceof Error) // true
的声明与ExtendableError
相同的文件中我得到console.log
,true
有效行为,以及我true
时1}}在它自己的文件中它变为ExtendableError
,false
?
答案 0 :(得分:0)
解决方法是停止对extends
使用Babel的polyfill并自行执行扩展
class ExtendableError {
constructor(message = '') {
Error.call(this, message)
// extending Error is weird and does not propagate `message`
Object.defineProperty(this, 'message', {
enumerable : false,
value : message,
writable : true,
});
Object.defineProperty(this, 'name', {
enumerable : false,
value : this.constructor.name,
writable : true,
});
if (Error.hasOwnProperty('captureStackTrace')) {
Error.captureStackTrace(self, this.constructor);
return
}
Object.defineProperty(this, 'stack', {
enumerable : false,
value : (new Error(message)).stack,
writable : true,
});
}
}
ExtendableError.prototype = Object.create(Error.prototype)
var b = new ExtendableError()
console.log(b instanceof Error) // true
console.log(b instanceof ExtendableError) // true
答案 1 :(得分:0)
关注babel松弛通道,并迅速填写此插件,允许这与babel 5向后兼容。
https://github.com/loganfsmyth/babel-plugin-transform-builtin-extend
{
["babel-plugin-transform-builtin-extend", {
"globals": ["Error"],
"approximate": true
}]
}