在.eslintrc.js文件中使用export default而不是module.exports

8

我想在我的.eslintrc.js文件中使用export default obj,而不是module.exports = obj,因为我们的代码库中其他地方都在使用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

2
eslintrc 使用 Node,但是 Node 不支持 es6 的导出。也许你可以通过转译器运行 Node 进程,但这样做效率低下且没有充分的理由是毫无意义的。 - Dominic
1
你可能可以使用 node --experimental-modules 标志使其工作,但我同意Dominic的观点,这并不值得。 - Andy
@Dominic,截至2022年,node已经支持ES6模块,你只需要在package.json中添加"type": "module"即可。 - Sumit
3个回答


1
要在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/coreeslintpirates软件包。接下来,创建一个定义您的钩子及其行为的文件。我们将简单地称其为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
    }
  );

然后,使用require语句将此模块导入到原始的.eslintrc.js中,并注册挂钩以劫持和转换通过未来的require语句导入的所有文件。最后,可以使用我们劫持的require语句导入使用ES2015语法编写的ESLint配置文件。

// .eslintrc.js

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

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

现在你应该可以开始了!当使用 ES2015 语法编写 Babel 配置时,也可以使用相同的方法。享受吧!

另外,您可以使用json。不知道在过去的两年中是否添加了某些内容,但是...{ "extends": [ "./.eslint/linters.cjs" ] }您可以将所有规则作为cjs文件放在.eslint文件夹中。 - JonShipman

0
如果您已经安装了@babel/register,那么只需将您的.eslintrc.js重命名为.eslintrc.babel.js(或任何您喜欢的名称),并将以下内容添加到.eslintrc.js中:

require('@babel/register')
module.exports = require('./.eslintrc.babel.js').default

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接