与多个环境的级联配置?

Cascading configuration with multiple environments?

如何在稍微不同的环境中使用 cascading configurations(一种用于 node.js,另一种用于浏览器)?两种环境之间唯一真正的区别是 env 变量。

理想情况下我想要这样的东西:

my-project
├── .eslintrc.json
├── .eslintrc.node.json
├── .eslintrc.browser.json
└─┬ src
  └── .eslintrc.json

我指示 ESLint 使用合并的地方:

有什么想法吗?

我试过的

  1. 我尝试声明单独的 .eslintrc.node.json.eslintrc.browser.json 文件。这有效,但级联配置不起作用(子目录中具有相似文件名的配置文件被忽略)。这种方法还存在两个文件之间存在大量重复的问题。

  2. 我尝试声明一个 .eslintrc.json 文件并将 env 配置文件传递给 eslint 构造函数。磁盘上的配置被拾取但是传递给构造函数的 env 被忽略了。

注意:我通过 gulp-eslint 与 eslint 交互,但我假设如果我直接与 eslint 交互,我会看到相同的行为。

我明白了。 CLIEngine 采用 "envs" 构造函数选项,因此我执行了以下操作:

gulp.task("lint-for-node", function()
{
    return gulp.src(
        [
            "src/**.js"
        ]).
        pipe(eslint(
            {
                "envs": ["es6", "node", "amd"]
            }
        )).
        pipe(eslint.format()).
        pipe(eslint.failOnError());
});

gulp.task("lint-for-browser", function()
{
    return gulp.src(
        [
            "src/**.js"
        ]).
        pipe(eslint(
            {
                "envs": ["es6", "browser"]
            }
        )).
        pipe(eslint.format()).
        pipe(eslint.failOnError());
});

级联配置正确地合并了 .eslintrc.jsonsrc/.eslintrc.json,并且 ESLint 从上面的构造函数中获取了正确的环境。