扩展错误es6类模块问题
Extending Error es6 class module issue
我遇到了一个非常奇怪的错误。我正在试着调试为什么我不能用babel 6处理这个模块es6错误。测试不断失败。其中一个测试相当简单——自定义错误的实例应该是错误。这两者都应该是true
。
console.log(err instanceof Error)
console.log(err instanceof ExtendableError)
以下是jsbin上完全相同的src
代码的示例,其中两个日志都返回true
。
- 带有未编译工作babel代码的jsbin
- jsbin与已编译的工作babel代码
如果您将代码放入一个节点文件并运行它,也会发生同样的行为
很明显,测试失败的原因是模块导入工作不正常,这很奇怪地失败了。
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
的有效行为,而当我在它自己的文件中有ExtendableError
时,它会变成false
、true
?
这是babel 5代码的输出。
浏览了babel slack频道,并迅速了解了允许与babel 5向后兼容的插件。
https://github.com/loganfsmyth/babel-plugin-transform-builtin-extend
{
["babel-plugin-transform-builtin-extend", {
"globals": ["Error"],
"approximate": true
}]
}
这是pr到es6的错误。
解决方法是停止使用Babel的polyfill for extends
,并在您自己的上进行扩展
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
相关文章:
- 导出模块 NodeJS 时出现问题
- 扩展错误es6类模块问题
- 在Node.js中使用异步模块时出现问题
- 挖空和显示模块模式的数据绑定问题
- Node.js模块问题
- Angularjs的智能表模块-与处理它有关的问题's指令
- Javascript 模块模式问题
- 我应该如何在JS中使用揭示模块模式,传递引用,并避免加载顺序问题
- 节点.js模块需要依赖问题
- ExpressJS 中记录器模块定义的问题
- 节点.js异步模块问题
- 问题 - AngularJS 未捕获错误: [$injector:模块rr]
- 仅在侦听器函数中加载脚本/模块会导致问题吗?
- 将模块安装为全局变量时遇到问题 -- /usr/bin/env 不是目录
- 使用茉莉花测试角度控制器 - 模块问题
- JavaScript 模块模式上下文问题
- 命令失败: gm 识别: 无法打开文件 (2) [没有这样的文件或目录].通用模块和 ES6 承诺的问题
- 在 Linux 操作系统上安装ibm_db模块时出现问题
- 使用ibm_db模块在Node JS中执行prepared语句时出现问题
- JavaScript 模块问题