要在ESLint配置文件中使用ES2015语法的默认导出,可以使用Babel进行转译和Pirates进行钩子以劫持导入ES2015编写的ESLint配置文件的
require
语句的组合。请允许我解释一下。
通常,ESLint会在项目根目录中寻找
.eslintrc.js
文件,并且通常不使用Babel对其进行解析。我们将重新利用此文件,使其执行两个操作:注册钩子并导入ES2015 ESLint配置文件。
假设您已经有一个使用ES2015默认导出语法的
.eslintrc.js
,请将其中的内容剪切并粘贴到一个新文件中,命名为
.es2015lintrc.js
或类似名称。名称无关紧要;它可以被称为任何您想要的名称。
// .es2015lintrc.js
export default {
// ESLint config properties...
}
在继续之前,请确保您已安装@babel/preset-env
、@babel/core
、eslint
和pirates
软件包。接下来,创建一个定义您的钩子及其行为的文件。我们将简单地称其为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
}
);
然后,使用require
语句将此模块导入到原始的.eslintrc.js
中,并注册挂钩以劫持和转换通过未来的require
语句导入的所有文件。最后,可以使用我们劫持的require
语句导入使用ES2015语法编写的ESLint配置文件。
const registerHook = require('./hook');
registerHook();
module.exports = require('./.es2015lintrc').default;
现在你应该可以开始了!当使用 ES2015 语法编写 Babel 配置时,也可以使用相同的方法。享受吧!
node --experimental-modules
标志使其工作,但我同意Dominic的观点,这并不值得。 - Andy