Babel не переносит `class` в файлы * .mjs

Дано

import test from './test.js';
import test2 from './test.mjs';

и test.js и test.mjs, оба содержащие

class A {
    test() {
        console.info('from mjs'); // or console.info('from js');
    }
}
export default A;

Babel transpiles

  [...];

  (0, _createClass2.default)(A, [{
    key: "test",
    value: function test() {
      console.info('from js');
    }
  }]);

  [...]

  class A {
    test() {
        console.info('from mjs');
    }
  }

  [...]

Как мне настроить babel для обработки файлов *.mjs точно так же, как файлов *.js. Мне нужно, чтобы они были файлами *.mjs, чтобы я мог запускать их в node без транспиляции.

Плагины, которые я сейчас добавляю явно:

'@babel/plugin-proposal-class-properties', '@babel/plugin-transform-runtime', '@babel/plugin-transform-classes'

@ T.J.Crowder Версия Babel: 7.0.0-beta.46, а последний плагин - transform-classes, или я вас неправильно понимаю? (Извините, мой опыт был в основном с трейсером до того, как Вавилон выиграл войны транспилеров)

David Mulder 02.05.2018 13:07

@ T.J. Crowder Ну, они все переместили в пространство имен @babel. Когда вы проверяете пакет es2015-classes npm, ссылка на github - это 404, так как он был перемещен в новую систему.

David Mulder 02.05.2018 13:18

В любом случае, компиляция классов явно работает сама по себе, просто файлы *.mjs каким-то образом обрабатываются по-другому и, следовательно, не передаются. Мне было интересно, может ли это быть связано с github.com/babel/babel/pull/5700

David Mulder 02.05.2018 13:19

Похоже, тогда название плагина было отвлекающим маневром. Удачи!

T.J. Crowder 02.05.2018 13:23

Разве это не преобразовывает только синтаксис класса или вообще ничего для файлов .mjs? Если последнее верно, вы можете проверить параметры babel-loader в конфигурации webpack, чтобы убедиться, что он также запускает babel для файлов mjs.

Elian Ibaj 03.05.2018 20:27

@ElianIbaj просто классы, все остальное трансформируется

David Mulder 03.05.2018 22:18

не могли бы вы поделиться своей конфигурацией веб-пакета?

Elian Ibaj 04.05.2018 17:18

@DavidMulder Почти два года спустя у меня возникла точно такая же проблема. Могу я спросить, как вы ее решили? Спасибо

foresightyj 18.03.2020 03:41

@foresightyj прочтите мой ответ ниже, надеюсь, это поможет

Attenzione 03.06.2021 11:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
9
464
1

Ответы 1

Вам необходимо добавить расширение *.mjs в конфигурацию вашего Webpack:

  module: {
    rules: [
      {
        test: /\.m?js$/,
        use: {
          loader: 'babel-loader',
          options: {
            // ...

Другие вопросы по теме