babel-loader: сборка модуля не удалась: SyntaxError: удаление локальной переменной в строгом режиме

Я использую babel-loader в webpack с пользовательским плагином babel для преобразования какого-либо стороннего кода в формат, который без проблем проходит через упаковщик Webpack. Однако, когда мой код проходит через анализатор babel (babylon) для построения AST, я получаю следующую ошибку:

Module build failed: SyntaxError: Deleting local variable in strict mode

Я нашел строку в баблоне, которая вызывает это сообщение: https://github.com/babel/babylon/blob/master/src/parser/expression.js#L236

Глядя на этот код, кажется, что я должен иметь возможность отключить синтаксический анализ строгого режима в Babylon, установив this.state.strict в false, Проблема в том, что я не знаю, как установить this.state.strict от babel-loader, Я надеюсь, что кто-то еще знает об этом больше.

Вот несколько вещей, которые я пробовал до сих пор:

  1. strict: false а также strictMode: false в query

    {
        test: /\.js$/,
        include: /bower_components/, //only thirdparty
        loader: 'babel',
        query: {
            strict: false,
            plugins: [__dirname + '/babel-plugins/custom-plugin']
        }
    }
    
  2. strict: false а также strictMode: false с плагином

    {
        test: /\.js$/,
        include: /bower_components/, //only thirdparty
        loader: 'babel',
        query: {
            plugins: [
                [__dirname + '/babel-plugins/custom-plugin', {strict: false}]
            ]
        }
    }
    
  3. Задавать state.opts.strict ложно в Program в custom-plugin.js (но это не должно работать, потому что babylon анализирует код и завершает работу, прежде чем передать AST для прохождения)

    module.exports = function (params) {
        return {
            visitor: {
                Program: function (path, state) {
                    state.opts.strict = false;
                }
            }
        };
    };
    
  4. использование blacklist в webpack.config.js а также .babelrc (который был удален в babel v6, так что это не должно работать в любом случае)

    {
        test: /\.js$/,
        include: /bower_components/, //only thirdparty
        loader: 'babel',
        query: {
            plugins: [__dirname + '/babel-plugins/custom-plugin']
        }
    }
    

Я могу подумать о некоторых хакерских решениях этой проблемы, но этот флаг должен быть доступен на поверхности через babel-loader или же .babelrc в той или иной форме.

1 ответ

Просто измените свои предустановки. Это могло помочь.

      presets: [
'es2015'
]

быть

      presets: [
['es2015', {modules: false}]
]
Другие вопросы по тегам