Использовать экспорт по умолчанию в файле.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