6

我想在我的文件中使用export default obj而不是,因为我们正在使用的代码库中的其他任何地方都使用.module.exports = obj.eslintrc.jsexport

到目前为止没有运气,很难找到这个问题。

我得到的错误:

> eslint src

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

SyntaxError: Unexpected token export
4

2 回答 2

1

要在 ESLint 配置文件中使用 ES2015 语法进行默认导出,可以使用 Babel 进行转译和 Pirates 进行挂钩的组合来劫持一条require语句,该语句导入用 ES2015 编写的 ESLint 配置文件。请允许我解释一下。

通常,ESLint 会.eslintrc.js在项目根目录中查找文件,通常由 Node.js 解析,无需 Babel。我们将重新利用这个文件,以便它做两件事:注册一个钩子和导入 ES2015 ESLint 配置文件。

假设您已经有一个.eslintrc.js使用 ES2015 默认导出语法的文件,从该文件中剪切内容并将其粘贴到一个名为.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
    }
  );

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

// .eslintrc.js

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

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

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

于 2019-08-24T21:53:23.860 回答
0

如果您已经@babel/register安装,那么只需将您的重命名.eslintrc.js.eslintrc.babel.js(或任何您喜欢的名称)并将其添加到.eslintrc.js

require('@babel/register')
module.exports = require('./.eslintrc.babel.js').default
于 2019-10-08T07:31:16.713 回答