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

问题描述 投票:0回答:1

Babel版本:7.6.0

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

到目前为止,它似乎可以在我测试过的所有现代浏览器上使用。但是为了确保它对较旧版本而言是防弹的,我想到了对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>)

[A previous SO answer正确指出Babel仅部分支持内置子类

according to their documentation,并建议使用transform-builtin-extend插件,该插件两年来一直没有维护,仅适合Babel6。] >

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

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

Babel版本:7.6.0。我正在开发一个供浏览器使用的JavaScript小部件,但是它依赖于为NodeJS构建的库(edtf.js)。特别是,它扩展了此文件中内置的Date。所以...

javascript ecmascript-6 babel browserify ecmascript-5
1个回答
0
投票

基本问题是,您[[不能

仅使用ES5和更早的功能来子类化Date。它根本不起作用(例如ErrorArray)。
© www.soinside.com 2019 - 2024. All rights reserved.