Babel 7 не компилирует класс ES6, который в node_modules - PullRequest
0 голосов
/ 20 февраля 2019

У меня ошибка в IE11 SCRIPT1002: синтаксическая ошибка (проблема с синтаксисом класса).Мой простой код с двумя строками:

import { struct } from 'superstruct';
console.log('finished');

Я не хочу, чтобы мой babel7 компилировал класс в код ES5

Я пытался написать файл .babelrc:

 {
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "ie": "11"
        }
      }
    ]
  ]
}

и https://babeljs.io/docs/en/babel-plugin-transform-classes тоже не исправили

Обновление: я пытался использовать @ babel / plugin-preset-es2015, который конвертирует класс в код ES5, но этот пакет устарел в babel7

Помогите мне, пожалуйста

1 Ответ

0 голосов
/ 28 февраля 2019

Чтобы преобразовать node_modules и дочерние пакеты в Babel 7, вам нужно использовать файл babel.config.js вместо .babelrc файла.

См. Этот комментарий к выпуску и babelдокументация по конфигурация всего проекта .В частности,

Новое в Babel 7.x, Babel имеет концепцию «корневого» каталога, который по умолчанию является текущим рабочим каталогом.Для конфигурации всего проекта Babel автоматически выполнит поиск «babel.config.js» в этом корневом каталоге.

...

Поскольку файлы конфигурации всего проекта отделены от физическихрасположение файла конфигурации, они могут быть идеальными для конфигурации, которая должна широко применяться, даже позволяя плагинам и пресетам легко применяться к файлам в node_modules или в пакетах с символическими ссылками, которые традиционно были довольно болезненными для настройки в Babel 6.x.

Суть в том, что .babelrc используется для локальных преобразований файлов проекта (не включая node_modules), в то время как babel.config.js следует рассматривать в рамках всего проекта и будет применяться к зависимостям пакетов при пакетировании (node_modules).Это немного сбивает с толку, но, надеюсь, это поможет!

Edit

Вот немного больше информации о полной конфигурации проекта для создания файла примера с помощью веб-пакета.Обратите внимание, что если вы используете .babelrc вместо babel.config.js, то здесь не будет работать. Запуск webpack-cli создает скрипт script.out.js, который не использует ключевое слово class.

script.js
import { struct } from 'superstruct';
console.log('finished');
babel.config.js
module.exports = {
    "presets": [
        [
            "@babel/preset-env",
            {
                    "targets": {
                    "ie": "11"
                }
            }
        ]
    ]
};
webpack.config.js
module.exports = {
    entry: './script.js',
    output: {
        path: __dirname,
        filename: 'script.out.js',
    },
    module: {
        rules: [ {
            test: /\.m?js$/,
            use: {
                loader: 'babel-loader'
            }
        } ]
    }
}
Зависимости пакетов
"@babel/core": "^7.3.4",
"@babel/preset-env": "^7.3.4",
"babel-loader": "^8.0.5",
"superstruct": "^0.6.0",
"webpack-cli": "^3.2.3"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...