monorepo中的自定义Eslint规则

时间:2019-09-30 12:20:40

标签: javascript eslint

我有一个带有服务器和前端的monorepo。我想将一组自定义eslint规则合并到我的仓库的前端组件中。我找不到告诉eslint前端目录中特定文件夹中有自定义规则的方法。我不想创建一个新的外部仓库并发布它以导入规则。到目前为止,我认为要执行的操作方法是在主存储库中创建一个子包(具有自己的package.json)。

在我的根package.json中,我有"eslint-plugin-atlas": "file:./src/main/javascript/build/eslint",

在我的根目录.eslintrc中,我有"plugin:atlas/recommended"

在package.json中指定的目录中,在index.js中,我具有以下代码;

'use strict';

module.exports = {
    rules: {
        'tsx-qualified-class-state-definition': {
            meta: {
                docs: {
                    description: 'A test rule',
                    category: 'Best Practices',
                    recommended: true,
                },
            },
            create: function(context) {
                console.log(context, 'THIS HAS BEEN HIT');
                return {};
            },
        },
    },
    configs: {
        recommended: {
            rules: {
                'tsx-qualified-class-state-definition': 'error',
            },
        },
    },
};

显然,上面的lint规则不会产生适当的掉毛,但是我希望看到console语句能够输出。当我的intellij IDE尝试读取配置时,出现错误;

Error: Failed to load config "plugin:atlas/recommended" to extend from.
Referenced from: F:\dev\workspace\lepton\src\main\javascript\build\.eslintrc.json
    at configMissingError (F:\dev\workspace\lepton\node_modules\eslint\lib\cli-engine\config-array-factory.js:233:9)
    at ConfigArrayFactory._loadExtendedPluginConfig (F:\dev\workspace\lepton\node_modules\eslint\lib\cli-engine\config-array-factory.js:674:31)
    at ConfigArrayFactory._loadExtends (F:\dev\workspace\lepton\node_modules\eslint\lib\cli-engine\config-array-factory.js:607:29)
    at ConfigArrayFactory._normalizeObjectConfigDataBody (F:\dev\workspace\lepton\node_modules\eslint\lib\cli-engine\config-array-factory.js:545:25)
    at _normalizeObjectConfigDataBody.next (<anonymous>)
    at ConfigArrayFactory._normalizeObjectConfigData (F:\dev\workspace\lepton\node_modules\eslint\lib\cli-engine\config-array-factory.js:491:20)
    at _normalizeObjectConfigData.next (<anonymous>)
    at createConfigArray (F:\dev\workspace\lepton\node_modules\eslint\lib\cli-engine\config-array-factory.js:307:25)
    at ConfigArrayFactory.loadFile (F:\dev\workspace\lepton\node_modules\eslint\lib\cli-engine\config-array-factory.js:382:16)
    at createCLIConfigArray (F:\dev\workspace\lepton\node_modules\eslint\lib\cli-engine\cascading-config-array-factory.js:140:35)

运行eslint时出现错误Definition for rule 'tsx-qualified-class-state-definition' was not found tsx-qualified-class-state-definition

2 个答案:

答案 0 :(得分:0)

不是eslint内置的解决方案,但是可以使用以下eslint插件来完成;

npmjs.com/eslint-plugin-rulesdir

答案 1 :(得分:0)

如果我错了,请纠正我,但是这不是一种反模式吗?我认为您应该在每个软件包目录中都有配置。

/
 - package.json
   /packages
       /pkg-1
         - .eslintrc.json
       /pkg-2
         - .eslintrc.json

有关更多信息,请参见here,这是一篇更广泛的文章,但应该为您提供一些指导。