首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用我使用类型记录- ESLint /utils编写的自定义eslint规则?

如何使用我使用类型记录- ESLint /utils编写的自定义eslint规则?
EN

Stack Overflow用户
提问于 2022-06-14 15:51:28
回答 1查看 250关注 0票数 2

我遵循打字稿-eslint教程为TypeScript编写自定义TypeScript规则。我可以轻松地运行我用ts-node编写的单元测试(也是用TS编写的),但是我很难将这个规则添加到我的项目的.eslintrc配置文件中。

我尝试使用几个ESLint插件导入本地规则(例如,eslint插件-本地),但这些插件似乎不支持用TS直接编写的规则。我必须先把它转到JS吗?(如果是的话,具体情况如何)是否有办法在不发生转移溢出的情况下添加规则?

EN

回答 1

Stack Overflow用户

发布于 2022-11-17 19:10:34

我最近还在类型记录中构建了一个定制的eslint插件(作为monorepo的一部分),并在集成到monorepo和vscode中的应用程序时遇到了类似的问题。为了解决这个问题,我使用了节点寄存器函数,它负责在没有编译的情况下运行类型记录。

代码语言:javascript
复制
// rules/customRule.ts
import { ESLintUtils } from '@typescript-eslint/utils';

const rule = ESLintUtils.RuleCreator.withoutDocs({
  create(context) {
    // ...
  },
  meta: {
    // ...
  },
});

export default rule;
代码语言:javascript
复制
// index.ts
import customRule from './rules/customRule';

const rules = {
  "custom-rule": customRule,
};

export default rules;
代码语言:javascript
复制
// index.js

/**
* This takes care of running the ts file with commonjs without running a
* compilation process first.
*/
require('ts-node').register()

const pkg = require('./package.json')

const rules = require('./index.ts').default

const pluginName = pkg.name.replace('eslint-plugin-', '')

module.exports = {
  rules: rules,
  configs: {
    recommended: {
      plugins: [pluginName],
      rules: {
        ....
      }
    }
  }
}

这样,您现在可以在应用程序中使用这个插件,方法是将这个包添加到应用程序和eslintrc文件中。您需要注意的几件事情如下:

  1. 在应用程序的tsconfig.json文件中,您需要确保ts-节点在公共ts中运行。此外,如果在自定义eslint插件中使用节点API,则将@type/ node添加到定制插件package.json的dev依赖项中。
代码语言:javascript
复制
// tsconfig.json
{
  "extends": "tsconfig/base.json",
  "compilerOptions": {
    "baseUrl": "./src",
    "outDir": "./build",
    "module": "esnext",
    "noEmit": true,
    .....
  },
  // Added this for typescript file used in custom eslint plugin
  "ts-node": {
    "compilerOptions": {
      "module": "commonjs",
      "types": ["node"]
    },
    "swc": true,
  },
  "include": ["src/**/*", "cypress/**/*", "./global.d.ts"]
}
  1. 如果您使用pnpm作为您的包管理器,并使用npmrc中的公共提升模式将所有eslint包提升到根,则需要将您的自定义eslint插件包添加到monorepo的根package.json中,否则eslint将无法找到自定义插件。这里有更多的细节
代码语言:javascript
复制
{
  "devDependencies": {
    "eslint-plugin-custom": "link:packages/eslint-plugin-custom"
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72619968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档