Babel 7 没有正确转换内置子类
Babel 7 not transforming builtin subclasses properly
Babel 版本:7.6.0
我正在研究 a JavaScript widget meant for browser use, but it depends on a library built for NodeJS ( edtf.js ). Particularly, it extends the Date
builtin in this file。
到目前为止,它似乎适用于我测试过的所有现代浏览器。但是为了确保它对年长的人来说是防弹的,我想到了 Babelifying the edtf library。这是来自 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>)
一个 correctly points out that builtin subclasses are only partially supported by Babel, according to their documentation, and suggests using the transform-builtin-extend插件,遗憾的是2年无人维护,只适合Babel 6.
transform classes 不应该这样做吗?我尝试将它包含在我的配置中,但它没有任何改变。
无论如何,如果有人对如何前进有任何建议,here is the github branch to try it for yourself,只需 运行 npm install
、npm run build
并打开 index.html
文件在您的浏览器中。欢迎任何建议:我不赞成 Babel 的想法,但我想确保我可以安全地使用这个 edtf 库并让它在大多数浏览器上工作。
根本问题是您 不能 subclass Date
仅使用 ES5 和更早的功能。它根本不起作用(例如 Error
和 Array
)。
如果您需要使用转译为 ES5 或更早版本的代码,则必须修改您的 class,使其不会尝试子class Date
。 (例如,使用 Date
实例作为成员,并将方法调用转发到...)
Babel 版本:7.6.0
我正在研究 a JavaScript widget meant for browser use, but it depends on a library built for NodeJS ( edtf.js ). Particularly, it extends the Date
builtin in this file。
到目前为止,它似乎适用于我测试过的所有现代浏览器。但是为了确保它对年长的人来说是防弹的,我想到了 Babelifying the edtf library。这是来自 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>)
一个
transform classes 不应该这样做吗?我尝试将它包含在我的配置中,但它没有任何改变。
无论如何,如果有人对如何前进有任何建议,here is the github branch to try it for yourself,只需 运行 npm install
、npm run build
并打开 index.html
文件在您的浏览器中。欢迎任何建议:我不赞成 Babel 的想法,但我想确保我可以安全地使用这个 edtf 库并让它在大多数浏览器上工作。
根本问题是您 不能 subclass Date
仅使用 ES5 和更早的功能。它根本不起作用(例如 Error
和 Array
)。
如果您需要使用转译为 ES5 或更早版本的代码,则必须修改您的 class,使其不会尝试子class Date
。 (例如,使用 Date
实例作为成员,并将方法调用转发到...)