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

Vin*_*rga 5 javascript export node.js eslint eslintrc

我想在我的文件中使用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
Run Code Online (Sandbox Code Playgroud)

小智 1

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

通常,ESLint 会在项目根目录中查找.eslintrc.js文件,并且通常由 Node.js 解析,而不需要 Babel。我们将重新调整该文件的用途,使其执行两件事:注册挂钩和导入 ES2015 ESLint 配置文件。

假设您已经使用.eslintrc.jsES2015 默认导出语法,从该文件中剪切内容并将其粘贴到名为.es2015lintrc.js或类似名称的新文件中。名称无关紧要;它可以被称为任何你想要的东西。

// .es2015lintrc.js

export default {

// ESLint config properties...

}
Run Code Online (Sandbox Code Playgroud)

在继续之前,请确保您已安装@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
    }
  );
Run Code Online (Sandbox Code Playgroud)

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

// .eslintrc.js

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

module.exports = require('./.es2015lintrc').default;
Run Code Online (Sandbox Code Playgroud)

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