Использовать экспорт по умолчанию в файле.eslintrc.js вместо module.exports

Я хотел бы использовать export default obj вместо module.exports = obj в моем .eslintrc.js файл, потому что везде в кодовой базе мы используем export,

Пока что не повезло, было сложно искать эту проблему.

Ошибка, которую я получаю:

> eslint src

Cannot read config file: src/.eslintrc.js
Error: Unexpected token export
src/.eslintrc.js:23
export default foo;
^^^^^^

SyntaxError: Unexpected token export

3 ответа

К сожалению:

ESLint в настоящее время не поддерживает конфигурацию ESM.

https://eslint.org/docs/latest/use/configure/configuration-files#configuration-file-formats

Чтобы использовать синтаксис ES2015 для экспорта по умолчанию в файле конфигурации ESLint, можно использовать комбинацию Babel для транспиляции и Pirates для перехватов для захвата requireоператор, который импортирует ваш файл конфигурации ESLint, написанный в ES2015. Позвольте мне объяснить.

Обычно ESLint ищет .eslintrc.jsфайл в корне проекта, и обычно он анализируется Node.js без Babel. Мы перепрофилируем этот файл, чтобы он выполнял две задачи: регистрировал ловушку и импортировал файл конфигурации ES2015 ESLint.

Предполагая, что у вас уже есть .eslintrc.js используя синтаксис экспорта по умолчанию ES2015, вырежьте содержимое из этого файла и вставьте его в новый файл с именем .es2015lintrc.jsили похожие. Имя не имеет значения; его можно называть как угодно.

// .es2015lintrc.js

export default {

// ESLint config properties...

}

Убедитесь, что у вас есть @babel/preset-env, @babel/core, eslint, а также piratesпакеты установлены перед продолжением. Затем создайте файл, который определяет ваш хук и его поведение. Мы назовем этоhook.js для простоты.

// hook.js

const {addHook} = require('pirates');
const {transform} = require('@babel/core');

module.exports = options =>
  addHook(
    function(source, filename) {
      return transform(source, {
        presets: [
          [
            '@babel/preset-env',
            {
              modules: 'cjs',
              targets: {
                node: process.versions.node
              }
            }
          ]
        ]
      }).code;
    },
    {
      exts: ['.js'],
      ignoreNodeModules: true,
      ...options
    }
  );

Затем импортируйте этот модуль в исходный .eslintrc.js используя require оператор и зарегистрируйте ловушку, которая захватывает и преобразует все файлы, импортированные с будущим requireзаявления. Наконец, файл конфигурации ESLint, написанный в синтаксисе ES2015, может быть импортирован с помощью нашего захваченногоrequire заявление.

// .eslintrc.js

const registerHook = require('./hook');
registerHook();

module.exports = require('./.es2015lintrc').default;

Теперь вам должно быть хорошо! Этот же метод можно использовать и при написании конфигурации Babel в синтаксисе ES2015. Наслаждайтесь!

Если у вас уже есть @babel/register установлен, а затем просто переименуйте свой .eslintrc.js к .eslintrc.babel.js (или как хотите) и добавьте это в .eslintrc.js:

require('@babel/register')
module.exports = require('./.eslintrc.babel.js').default
Другие вопросы по тегам