Node.js 有没有办法防止将类传输到构造函数?
我有一个node.js应用程序使用流。为了摆脱流语法,我使用了babel:Node.js 有没有办法防止将类传输到构造函数?,node.js,ecmascript-6,babeljs,transpiler,Node.js,Ecmascript 6,Babeljs,Transpiler,我有一个node.js应用程序使用流。为了摆脱流语法,我使用了babel: { "presets": ["env", "flow"], "plugins": [ "transform-flow-strip-types" ] } 这是可行的,但问题在于使用“instanceof”操作符。我扩展了标准错误构造函数,如下所示: /* @flow */ class BadRequestError extends Error { constructor(
{
"presets": ["env", "flow"],
"plugins": [
"transform-flow-strip-types"
]
}
这是可行的,但问题在于使用“instanceof”操作符。我扩展了标准错误构造函数,如下所示:
/* @flow */
class BadRequestError extends Error {
constructor(message:string) {
super(message);
}
}
class InvalidRequestBodyError extends Error {
constructor(message:string) {
super(message);
}
}
class UnauthorizedError extends Error {
constructor(message:string) {
super(message);
}
}
class ExpiredResourceError extends Error {
constructor(message:string) {
super(message);
}
}
class InternalServerError extends Error {
constructor(message:string) {
super(message);
}
}
class ResourceNotFoundError extends Error {
constructor(message:string) {
super(message);
}
}
module.exports = {
BadRequestError,
InvalidRequestBodyError,
UnauthorizedError,
ExpiredResourceError,
InternalServerError,
ResourceNotFoundError
};
class BadRequestError extends Error {
constructor(message:string) {
super(message);
/* $FlowFixMe */
this.constructor = BadRequestError;
/* $FlowFixMe */
this.__proto__ = BadRequestError.prototype;
}
}
在Node.js中,它可以工作。但在传输之后,instanceof不再工作,因为类转换为构造函数
有什么办法可以预防吗
使用巴别塔-cli@6.26.0及node@8.9.0,这是我正在使用的命令行:
$ node_modules/.bin/babel ./src -d ./dist
作为国家
没有任何配置选项,babel preset env的行为与babel preset latest(或babel-preset-es2015、babel-preset-es2016和babel-preset-es2017)完全相同
这就是ES6类被传输到常规函数的原因
此页面包含有关在节点中使用此预设的所有信息:
为方便起见,您可以使用“node”:“current”仅包含运行Babel所用的node.js版本所需的多边形填充和变换
应该是:
{
"presets": ["env", {
"targets": {
"node": "current"
}
}, "flow"],
"plugins": [
"transform-flow-strip-types"
]
}
我用一根绳子把它修好了
/* @flow */
class BadRequestError extends Error {
constructor(message:string) {
super(message);
}
}
class InvalidRequestBodyError extends Error {
constructor(message:string) {
super(message);
}
}
class UnauthorizedError extends Error {
constructor(message:string) {
super(message);
}
}
class ExpiredResourceError extends Error {
constructor(message:string) {
super(message);
}
}
class InternalServerError extends Error {
constructor(message:string) {
super(message);
}
}
class ResourceNotFoundError extends Error {
constructor(message:string) {
super(message);
}
}
module.exports = {
BadRequestError,
InvalidRequestBodyError,
UnauthorizedError,
ExpiredResourceError,
InternalServerError,
ResourceNotFoundError
};
class BadRequestError extends Error {
constructor(message:string) {
super(message);
/* $FlowFixMe */
this.constructor = BadRequestError;
/* $FlowFixMe */
this.__proto__ = BadRequestError.prototype;
}
}
请注意,接下来,它将在巴别塔7中修复 谢谢你的回复,但这不是问题。我通过添加另一个插件和有人告诉我的技术进行了修复。很高兴你解决了它,但这才是真正的问题。因为您已经在使用
env
,所以应该使用这种方法。它只用于应用特定环境中需要的转换。好的,谢谢。所以我只是将目标env更改为node:6.9.5,这是我真正的目标平台使用的,但巴贝尔仍然将类转换为构造函数。后跟此站点:,节点支持v4.9.1中的类。为什么会发生这种情况?@modernator是的,从4.0开始支持类。我无法复制这一点。我指定了“节点”:“6.9.5”
,其行为方式与“节点”:“当前”
相同,即不传输类。它是巴贝尔CLI 6.18.0和巴贝尔预设环境1.6.1。最新的巴别塔6也一样,