Дано
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
. Когда вы проверяете пакет es2015-classes
npm, ссылка на github - это 404, так как он был перемещен в новую систему.
В любом случае, компиляция классов явно работает сама по себе, просто файлы *.mjs
каким-то образом обрабатываются по-другому и, следовательно, не передаются. Мне было интересно, может ли это быть связано с github.com/babel/babel/pull/5700
Похоже, тогда название плагина было отвлекающим маневром. Удачи!
Разве это не преобразовывает только синтаксис класса или вообще ничего для файлов .mjs? Если последнее верно, вы можете проверить параметры babel-loader в конфигурации webpack, чтобы убедиться, что он также запускает babel для файлов mjs.
@ElianIbaj просто классы, все остальное трансформируется
не могли бы вы поделиться своей конфигурацией веб-пакета?
@DavidMulder Почти два года спустя у меня возникла точно такая же проблема. Могу я спросить, как вы ее решили? Спасибо
@foresightyj прочтите мой ответ ниже, надеюсь, это поможет
Вам необходимо добавить расширение *.mjs
в конфигурацию вашего Webpack:
module: {
rules: [
{
test: /\.m?js$/,
use: {
loader: 'babel-loader',
options: {
// ...
@ T.J.Crowder Версия Babel:
7.0.0-beta.46
, а последний плагин -transform-classes
, или я вас неправильно понимаю? (Извините, мой опыт был в основном с трейсером до того, как Вавилон выиграл войны транспилеров)