Versions

共享配置

.eslintrc 文件中的配置是项目的重要组成部分,因此,你可能想与其他项目或人分享它。可共享配置允许你在 npm 上发布你的配置设置,让其他人下载并在他们的 ESLint 项目中使用它。

想分享你的 ESLint 配置可以创建一个可共享配置。在 npm 发布可共享配置可以让其他人下载并在它们的 ESLint 项目中使用它。

此页面解释了如何创建并发布共享配置。

创建可共享配置

可共享配置时一个只导出配置对象的 npm 包,就像你平时那样创建 Node.js 模块那样。

模块名称必须遵循下列任一格式:

  • eslint-config- 开头,像是 eslint-config-myconfig
  • 如果是 npm 范围模块,则只需将模块以 @scope/eslint-config 命名或以此为前缀命名即可,如 @scope/eslint-config@scope/eslint-config-myconfig

在你的模块中,在模块的 main 入口点文件中导出共享配置。默认主要入口点是 index.js。示例:

module.exports = {

    globals: {
        MyGlobal: true
    },

    rules: {
        semi: [2, "always"]
    }

};

由于 index.js 文件完全是 JavaScript,你可以从文件中读取这些设置或动态生成它们。

发布可共享配置

在准备好可共享配置后,你就可以发布到 npm 并与他人共享来。我们建议在 package.json 文件中使用 eslinteslintconfig 这两个关键词,这样别人能更容易找到你的模块。

你应该在 package.json 中使用 peerDependencies 字段声明对 ESLint 的依赖。为了确保未来的兼容性,推荐使用 >= 范围语法来声明依赖关系和所需要的最低 ESLint 版本。比如:

{
    "peerDependencies": {
        "eslint": ">= 3"
    }
}

如果你的可共享配置依赖于某个插件,你也应该把它指定为 peerDependency(插件将基于终端用户的项目加载,所以终端用户需要安装所需插件)。然而,如果你的可共享配置依赖于自定义解析器或另一个可共享配置,则可以在 package.json 将这些包指定为 dependencies

你也可以在发布之前通过全局链接你的模块,在自己电脑上测试你的可共享配置。输入:

npm link

然后,在想要使用可共享配置的项目中,输入:

npm link eslint-config-myconfig

请确保将 eslint-config-myconfig 替换为你的模块的实际名称。

使用可共享配置

在配置文件的 extends 字段中包括配置名称就可以使用可共享配置。值就是你的模块名称。比如:

{
    "extends": "eslint-config-myconfig"
}

你也可以省略 eslint-config-,ESLint 会自动假定使用这一前缀:

{
    "extends": "myconfig"
}

你不能通过 ESLint CLI 的 --config 标志使用可共享配置。

npm 范围模块

也支持多种使用 npm 范围模块对方式:

可以使用模块的名称:

{
    "extends": "@scope/eslint-config"
}

你也可以省略 eslint-config,ESLint 会自动假定使用这一前缀:

{
    "extends": "@scope"
}

模块名称也可以自定义。比如你的包叫做 @scope/eslint-config-myconfig,那么可以在配置中这样指定:

{
    "extends": "@scope/eslint-config-myconfig"
}

你也可以在配置中省略 eslint-config

{
    "extends": "@scope/myconfig"
}

使用可共享配置覆盖设置

你可以直接在 .eslintrc 文件中加入可共享配置的设置,从而覆盖这些设置。

共享多个配置

在同一个 npm 包中可以共享多个配置。你可以按照创建可共享配置章节的指示为包指定一个默认的配置。你可以通过在 npm 包添加一个新文件,然后从你的 ESLint 配置中引用它来指定额外的可共享配置。

作为一个例子,你可以在你的 npm 包的根目录创建名为 my-special-config.js 的文件,并导出配置,例如:

// my-special-config.js

module.exports = {
    rules: {
        quotes: [2, "double"]
    }
};

然后,假设你使用的是 eslint-config-myconfig 这个包,你可以通过以下方式访问额外的配置:

{
    "extends": "myconfig/my-special-config"
}

当使用范围模块时,不可能省略 eslint-config 命名空间。这样做会导致解析错误,如上所述。假设包的名字是 @scope/eslint-config,可以这样扩展配置:

{
    "extends": "@scope/eslint-config/my-special-config"
}

注意,你可以省去文件名中的 .js。通过这种方式,你可以在你的包中添加你想要的额外配置。

重要:我们强烈建议为你的插件设置默认配置,以避免错误。

本地配置文件解析

如果你需要制作多个可以相互扩展并生活在不同目录下的配置,你可以创建一个可共享的配置来处理这种情况。

以下示例,我们假设你使用的包名是 eslint-config-myconfig,你的包会看起来像这样:

myconfig
├── index.js
└─┬ lib
  ├── defaults.js
  ├── dev.js
  ├── ci.js
  └─┬ ci
    ├── frontend.js
    ├── backend.js
    └── common.js

index.js 中,可以这样:

module.exports = require('./lib/ci.js');

现在包里有 /lib/defaults.js,其中包含:

module.exports = {
    rules: {
        'no-console': 1
    }
};

/lib/ci.js 里:

module.exports = require('./ci/backend');

/lib/ci/common.js 里:

module.exports = {
    rules: {
        'no-alert': 2
    },
    extends: 'myconfig/lib/defaults'
};

尽管是在一个完全不同的目录下,所有 extends 都必须使用想扩展的配置文件的完整包路径。

现在在 /lib/ci/backend.js 里:

module.exports = {
    rules: {
        'no-console': 1
    },
    extends: 'myconfig/lib/ci/common'
};

在最后一个文件中,再次看到为了正确解析你的配置,需要包括完整的软件包路径。

进一步阅读

更改语言