在 .eslintrc.js 文件中使用默认导出而不是 module.exports

问题描述 投票:0回答:3

我想在我的

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
javascript node.js export eslint eslintrc
3个回答
1
投票

要在 ESLint 配置文件中使用 ES2015 语法进行默认导出,可以使用 Babel 进行转译和 Pirates 进行挂钩的组合来劫持一个

require
语句,该语句导入用 ES2015 编写的 ESLint 配置文件。请允许我解释一下。

通常,ESLint 会在项目根目录中查找

.eslintrc.js
文件,它通常由 Node.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

// 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
语句导入的所有文件的钩子。最后,可以使用我们劫持的
require
语句导入以 ES2015 语法编写的 ESLint 配置文件。

// .eslintrc.js

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

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

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


1
投票

2023 年更新:

新配置文件(

eslint.config.js
/ 称为 flat 配置),现在支持 ESM:

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


旧答案:

不幸的是:

ESLint 目前不支持 ESM 配置。

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


0
投票

如果您已经安装了

@babel/register
,则只需将
.eslintrc.js
重命名为
.eslintrc.babel.js
(或任何您喜欢的名称)并将其添加到
.eslintrc.js

require('@babel/register')
module.exports = require('./.eslintrc.babel.js').default
© www.soinside.com 2019 - 2024. All rights reserved.