Babel 7无法正确转换内置子类

Babel版本:7.6.0

我正在研究a JavaScript widget供浏览器使用,但这取决于为NodeJS(edtf.js)构建的库。特别是,它扩展了this file中内置的Date

到目前为止,它似乎可以在我测试过的所有现代浏览器上运行。但是为了确保它对较旧版本而言是防弹的,我想到了对edtf库进行Babel化。这是my Gruntfile.js中的browserify配置:

browserify: {
  development: {
    src: [
      "node_modules/edtf/index.js"
    ],dest: './dist/js/edtf.js',options: {
      browserifyOptions: { standalone: 'edtf' },transform: [["babelify",{
        "presets": ["@babel/preset-env"],"plugins": [["@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>)

一个previous SO answer正确地指出,内置的子类仅受Babel的部分支持according to their documentation,并建议使用transform-builtin-extend插件,可惜该插件无法维护2年,仅适合Babel 6。

transform classes不能为此工作吗?我尝试将其包含在我的配置中,但它完全没有改变。

无论如何,如果有人对如何前进有任何建议,here is the github branch to try it for yourself,只需运行npm installnpm run build并在浏览器中打开index.html文件。任何建议都值得欢迎:我不喜欢Babel的想法,但我想确保我可以安全地使用此edtf库,并使它在大多数浏览器上都可以使用。

adlofboy 回答:Babel 7无法正确转换内置子类

一个基本的问题是,不能仅使用ES5和更早的功能来子类Date。根本不起作用(例如ErrorArray)。

如果您需要使用转译到ES5或更早版本的代码,则必须修改您的类,以便它不会尝试子类化Date。 (例如,使用Date实例作为成员,然后转发方法调用...)

本文链接:https://www.f2er.com/3167034.html

大家都在问