Javascript Babel 7未正确转换内置子类

Javascript Babel 7未正确转换内置子类,javascript,ecmascript-6,babeljs,browserify,ecmascript-5,Javascript,Ecmascript 6,Babeljs,Browserify,Ecmascript 5,巴别塔版本:7.6.0 我正在开发一个用于浏览器的程序,但它依赖于为NodeJS()构建的库。特别是,它扩展了内置的日期 到目前为止,它似乎可以在我测试过的所有现代浏览器上运行。但为了确保它对年长的人来说是防弹的,我想到了使用edtf库。以下是来自以下站点的browserify配置: browserify:{ 发展:{ src:[ “node_modules/edtf/index.js” ], 目的地:'./dist/js/edtf.js', 选项:{ browserifyOptions:{st

巴别塔版本:7.6.0

我正在开发一个用于浏览器的程序,但它依赖于为NodeJS()构建的库。特别是,它扩展了内置的
日期

到目前为止,它似乎可以在我测试过的所有现代浏览器上运行。但为了确保它对年长的人来说是防弹的,我想到了使用edtf库。以下是来自以下站点的browserify配置:

browserify:{
发展:{
src:[
“node_modules/edtf/index.js”
],
目的地:'./dist/js/edtf.js',
选项:{
browserifyOptions:{standalone:'edtf'},
转换:[“宝贝”{
“预设”:[“@babel/preset env”],“插件”:[[“@babel/transform runtime”,{“helpers”:false}]
}]]
}
}
},
经过大量修改后,此配置在页面上加载生成的javascript文件时至少不会触发任何错误,但一旦我开始使用库,它就会因以下错误而中断:

edtf.js:3040 Uncaught TypeError: this is not a Date object.
   at Date.getUTCFullYear (<anonymous>)
   at Date.get (edtf.js:3040)
   at Date.toEDTF (edtf.js:2960)
   at Date.value (edtf.js:5696)
   at new Date (<anonymous>)
edtf.js:3040未捕获类型错误:这不是日期对象。
at Date.getUTCFullYear(正确地指出,内置子类仅部分受Babel支持,并建议使用插件,遗憾的是,该插件已两年未维护,仅适用于Babel 6

我试着把它包括在我的配置中,但它完全没有改变


无论如何,如果有人对如何前进有任何建议,只需运行
npm install
npm run build
,并在浏览器中打开
index.html
文件。欢迎提供任何建议:我不赞同巴贝尔的想法,但我想确保我可以安全地使用这个edtf库,并让它在majorit上工作基本的问题是,你不能只使用ES5和早期的功能来对
Date
进行子类化。它根本不起作用(比如
Error
Array


如果您需要使用传输到ES5或更早版本的代码,则必须修改您的类,使其不会尝试子类化
Date
(例如,使用
Date
实例作为成员,并转发方法调用…)基本问题是,不能仅使用ES5和早期功能对
Date
进行子类化。它根本不起作用(如
Error
Array


如果您需要使用传输到ES5或更早版本的代码,您必须修改您的类,使其不会尝试子类化
Date
(例如,使用
Date
实例作为成员,并将方法调用转发到…

谢谢,我将研究该选项!这是我唯一的问题(除了需要额外的headscratching之外)这意味着要对原来的edtf.js项目进行分叉。我希望严格依赖它作为一种依赖,从未来的更改中获益。我不认为维护人员打算让库ES5兼容(@SylvainB-Ugh,那太糟糕了。:-|所以我按照你的建议修改了这个类来操纵一个私有的
日期
成员,它看起来就像一个魔咒一样工作!现在我想:难道没有办法让巴贝尔自动这么做吗?@SylvainB-酷!我怀疑这对人们来说还不够大。我这也是相当不完美的,因为当然
x instanceof Date
将为false(尽管我们希望在很多代码中没有
instanceof
检查…)。(想想看,还有一个问题,Date在没有类型提示的情况下被转换为primitive时默认为
toString
,但是在这种情况下,您的类将默认为
valueOf
。如果没有ES2015特性[
Symbol.toPrimitive
],您就无法解决这个问题。叹气)当然可以写一个转换插件来实现这一点。哈哈,是的,我可能最终会做那个转换插件……你提到的
instanceof
toString
这两个问题似乎并没有影响到我的小部件,所以我找不到不那么极端的东西,这真是一个遗憾。谢谢,我会研究这个问题t选项!我唯一的问题是(除了需要额外的headscratch)这将意味着分叉原始edtf.js项目。我希望严格依赖它作为一种依赖,从未来的更改中获益。我认为维护人员不打算让库ES5兼容(@SylvainB-Ugh,那太糟糕了。:-|所以我按照你的建议修改了这个类来操纵一个私有的
日期
成员,它看起来就像一个魔咒一样工作!现在我想:难道没有办法让巴贝尔自动这么做吗?@SylvainB-酷!我怀疑这对人们来说还不够大。我这也是相当不完美的,因为当然
x instanceof Date
将为false(尽管我们希望在很多代码中没有
instanceof
检查…)。(想想看,还有一个问题,Date在没有类型提示的情况下被转换为primitive时默认为
toString
,但是在这种情况下,您的类将默认为
valueOf
。如果没有ES2015特性[
Symbol.toPrimitive
],您就无法解决这个问题。叹气)当然可以写一个转换插件来实现这一点。哈哈,是的,我可能最终会做那个转换插件……你提到的
instanceof
toString
这两个问题似乎并没有影响到我的小部件,所以我找不到不那么极端的东西,这让我很沮丧。