Как перенести модули node_modules с помощью babel-loader? - PullRequest
0 голосов
/ 04 января 2019

Проблема: Я хочу создать пакетные файлы для веб-сайта для старых браузеров (> = IE10).

Мой перенесенный код выдает ошибки в старом Internet Explorer 11, когда я переносил код с помощью babel 7.x с использованием babel-loader, так как кажется, что node_modules модули больше не будут переноситься по умолчанию?

Вопрос: Как я могу убедиться, что все мои node_module модули будут перенесены, если они не были уже отправлены автором пакета?

webpack.config.js с использованием babel-loader

// webpack.config.js
rules: [
    {
        test: /\.(js|jsx)$/,
        use: [
            {
                loader: 'babel-loader',
            },
        ],
        exclude: [],
    },
],

Конфигурация babelrc.js с использованием babel 7.x

// .babelrc.js
module.exports = function(api) {
    const presets = [
        [
            '@babel/preset-env',
            {
                useBuiltIns: 'usage',
                ignoreBrowserslistConfig: true,
                targets: {
                    node: 8,
                    browsers: [
                        'last 3 versions',
                        '> 1% in DE',
                        'Explorer >= 10',
                    ],
                },
            },
        ],
        '@babel/preset-react',
    ];

    const plugins = [
        // ...
    ];

    return {
        presets,
        plugins,
    };
};

Обновление 1:

Это была проблема с Бабелем. Моя конфигурация babel была названа .babel.rc, а настройка babel 7 по умолчанию - искать файл конфигурации с именем babel.config.js, см. здесь .

Таким образом, после переименования файла конфигурации babel из «.babel.rc» в «babel.config.js», я мог бы применить решение в моем «webpack.config.js», описанном здесь , для преобразования нетрансформированного Пакеты «node_modules» с таким решением:

// webpack.config.js
rules: [
    {
        test: /\.(js|jsx)$/,
        use: [
            {
                loader: 'babel-loader',
            },
        ],
        // Exclude the untransformed packages from the exclude rule here
        exclude: /node_modules\/(?!(MY_MODULE|ANOTHER-ONE)\/).*/, 
    },
],

Вопрос: Это похоже на обходной путь, но разве нет более удобного способа решения таких проблем? Я просто притворяюсь, что в ближайшем будущем будет все больше и больше нетрансформированных пакетов (после этого обсуждения ), и всегда ли мы должны вручную указывать имена пакетов для него в правиле exclude веб-пакетов ??

...