Babel CLI игнорирует конфигурацию, когда ввод передается по каналу

1

Это может быть ошибкой в Babel CLI (я использую 6.24.1), но, похоже, что Babel не применяет .babelrc когда исходные данные .babelrc на него.


Пример:

Учитывая этот исходный файл, foo.js:

const foo = 10;

Хорошо: эта команда делает то, что, по вашему мнению, должна, с .babelrc в том же каталоге с предустановленным es2015 в нем:

babel foo.js --out-file foo.classic.js

Это приводит к foo.classic.js, с правильно переданным контентом:

"use strict";

var foo = 10;

Плохо: эта команда не делает то, что вы ожидаете:

cat foo.js | babel --out-file foo2.classic.js

Это приводит к foo2.classic.js, с неизменным содержимым:

const foo = 10;

Хорошо: эта команда делает то, что вы ожидаете, так что это не ошибка конфигурации:

cat foo.js | babel --presets es2015 --out-file foo3.classic.js

Результат в foo3.classic.js:

"use strict";

var foo = 10;

Анализ. В случаях с трубопроводами Вавилон, очевидно, считывает данные из трубы и передает его (потому что создается выходной файл), но, похоже, что Babel полностью игнорирует .babelrc когда он получает данные из канала.

Для справки, это - .babelrc который должен применяться:

{
    "presets": [ "es2015" ]
}

Зачем использовать трубы?

Для чего это стоит, вы можете задаться вопросом: "Зачем вводить вход в Babel? Почему бы просто не использовать файлы?"

Ну, во-первых, трубопровод является поддерживаемой функцией, поэтому он должен "просто работать".

Но в моем случае исходные файлы, передаваемые в Babel, сами являются результатом цепочки генерации кода, которая выводит действительный код ES6 в качестве вывода. Было бы неплохо, если бы генератор кода не ~temp.js промежуточный файл ~temp.js а затем должен был быть удален после этого; было бы намного лучше, если бы трубы работали так, как они предполагали.


Вопрос:

Это ошибка? Если да, знает ли кто-нибудь об улучшенном ~temp.js пути, чем просто испускает файл с именем ~temp.js, передавая его в Babel, а затем удаляя его?

Теги:
babeljs

1 ответ

1
Лучший ответ

Это ожидаемое поведение, но мы говорили о некоторых альтернативах в https://github.com/babel/babel/pull/5384.

См. Мой комментарий здесь для некоторой информации. Как уже упоминалось, текущее исправление для вас будет состоять в том, чтобы сделать

cat foo.js | babel --filename foo.js --out-file foo2.classic.js

сообщить Бабелю имя файла, поэтому он знает, где искать файл .babelrc.

  • 0
    Ну, немного разочаровывает, но ответ принят, так как это от официального сопровождающего. Однако я определенно kirs с предложением --babelrc добавить опцию --babelrc . Его не сложно понять (или реализовать), он похож на параметры --config , которые есть во многих других инструментах (поэтому есть прецедент), и он очень предсказуем в своем поведении.
  • 0
    kirs определенно прав в одном: текущее поведение абсолютно нарушает Принцип Наименьшего Изумления, так что само по себе требует каких-то изменений. Либо он должен читать из текущего каталога, либо добавить --babelrc (или, что еще лучше, сделать и то и другое) для поддержки взаимодействия с stdin .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню