Базовое преобразование Babel завершается неудачно с трассировкой стека - PullRequest
0 голосов
/ 29 июня 2019

Очень простая конфигурация Babel не работает, и я не знаю почему. Использование синтаксических плагинов вместо преобразователей работает , поэтому Babel может правильно проанализировать этот пример.

Я знаю, что использование предложения декораторов без { legacy: true } приводит к ошибке, так как еще не определено, как частные члены будут взаимодействовать с декораторами. Однако в устаревшем предложении такой проблемы нет (или я так думал).

Конфигурация Babel:

module.exports = {
  plugins: [
    ['@babel/proposal-decorators', { legacy: true }],
    ['@babel/proposal-class-properties', { loose: true }],
  ],
};

Файл для сборки:

class Foo {
  @Decorator
  #bar = '';
}

Попытка построения приводит к следующей ошибке (изменена только для удаления ненужной информации о пути):

TypeError: Property value expected type of string but got null
    at Object.validate (./node_modules/@babel/types/lib/definitions/utils.js:161:13)
    at validate (./node_modules/@babel/types/lib/validators/validate.js:17:9)
    at builder (./node_modules/@babel/types/lib/builders/builder.js:46:27)
    at Object.StringLiteral (./node_modules/@babel/types/lib/builders/generated/index.js:335:31)
    at ./node_modules/@babel/plugin-proposal-decorators/lib/transformer-legacy.js:93:83
    at Array.reduce (<anonymous>)
    at applyTargetDecorators (./node_modules/@babel/plugin-proposal-decorators/lib/transformer-legacy.js:84:32)
    at applyMethodDecorators (./node_modules/@babel/plugin-proposal-decorators/lib/transformer-legacy.js:70:10)
    at PluginPass.ClassExpression (./node_modules/@babel/plugin-proposal-decorators/lib/transformer-legacy.js:156:94)
    at newFn (./node_modules/@babel/traverse/lib/visitors.js:193:21)

Это выполняется при новой установке. Зависимости:

@babel/cli@^7.4.4
@babel/core@^7.4.5
@babel/plugin-proposal-decorators@^7.4.4
@babel/plugin-proposal-class-properties@^7.4.4

NB. На самом деле мне не нужно преобразовывать декораторы - это обрабатывается другим плагином. Я попытался заменить преобразователь декоратора на плагин синтаксиса, но затем я получаю сообщение об ошибке, в котором говорится, что декораторы не включены.

Это ошибка в Вавилоне? Во всяком случае, должно произойти сбой с «хорошим» сообщением об ошибке, а не случайной трассировкой стека.

1 Ответ

0 голосов
/ 02 июля 2019

За обсуждение GitHub Бабеля , это правильное поведение.

Цитирование ответа @ nicolo-ribaudo,

Старое предложение декораторов не сделало 'Не указывайте любое взаимодействие с закрытыми свойствами класса.

В свободном режиме они, вероятно, могут обрабатываться аналогично тому, как оформляются открытые свободные поля, но это потребует большого рефакторинга нашего старого плагина декораторов.

А пока я хотел бы увидеть сообщение об ошибке, понятное человеку.

...