Babel 7 не преобразует встроенные подклассы должным образом - PullRequest
0 голосов
/ 04 ноября 2019

Babel версия: 7.6.0

Я работаю над виджетом JavaScript , предназначенным для использования браузером, но это зависит от библиотеки, созданной для NodeJS ( edtf.js ). В частности, он расширяет встроенный в этот файл *1008* этот файл .

Пока что он работает во всех современных браузерах, с которыми я его тестировал. Но чтобы убедиться, что он пуленепробиваемый для старых, я подумал о Babelification библиотеки edtf. Вот конфигурация browserify из my Gruntfile.js :

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 предыдущий ответ SO правильно указывает на то, что встроенные подклассы поддерживаются только частичноBabel , согласно их документации , и предлагает использовать плагин transform-builtin-extend , который, к сожалению, не поддерживается в течение 2 лет и подходит только для Babel 6.

Разве классы преобразования не должны работать для этого? Я попытался включить его в свой конфиг, но он ничего не изменил.

В любом случае, если у кого-нибудь есть какие-либо советы о том, как двигаться вперед, , вот ветка github, чтобы попробовать это для себя ,просто запустите npm install, npm run build и откройте файл index.html в вашем браузере. Любая рекомендация приветствуется: я не женат на идее Babel, но хочу убедиться, что могу безопасно использовать эту библиотеку edtf и работать с ней в большинстве браузеров.

1 Ответ

2 голосов
/ 04 ноября 2019

Основная проблема в том, что вы не можете подкласс Date, используя только ES5 и более ранние функции. Он просто не работает (например, Error и Array).

Если вам нужно использовать код, переданный на ES5 или более раннюю версию, вам придется изменить свой класс, чтобы он не пыталсяподкласс Date. (Например, вместо этого используйте экземпляр Date в качестве члена и перенаправьте вызовы метода на ...)

...