繁体   English   中英

带有 Angular 7 和 `ng lint` 的 TypeScript 中的自定义 TSLint 规则

[英]Custom TSLint Rule in TypeScript with Angular 7 and `ng lint`

我有一个新的工作区,用于我正在维护的图书馆。 我们在 Angular 5 中使用的 2 个自定义 TSLint 规则没有利用 Angular CLI。 我们现在正在转向 Angular CLI 和 Angular 7。

我们所做的一件事是不需要在 TSLint 接收它们之前将这些 TSLint 规则编译为 JS。 但是,这需要在我们的package.json的 lint 脚本中使用ts-node

我如何告诉ng选择这些 TypeScript TSLint 规则文件?

tsconfig.json (在projects/my-lib/src

{
  "rulesDirectory": "./lib/tslint-rules"
}

然后,在我们的主工作区中,我们从库中扩展此tsconfig并添加我们的自定义规则。

Could not find implementations for the following rules specified in the configuration:
    my-custom-tslint-rule
Try upgrading TSLint and/or ensuring that you have all necessary custom rules installed.
If TSLint was recently upgraded, you may have old rules configured which need to be cleaned up.

好的,所以我想通了。 如果你想在你的 Angular 库中包含自定义的 TSLint 规则,你需要做一些事情。

  1. 确保它们在您的public_api.ts中导出。 这将确保当你运行ng build <library-name> ,TypeScript 编译器会选择这些文件并编译它们并将它们放在dist文件夹中。

  2. 配置您的tsconfig.lib.json以使用非 es6/es2015 模块。 这就是给我带来很多问题的原因。 似乎 TSLint 不支持 es2015 样式模块。 我已将其切换为使用umd (我还注意到commonjs也能commonjs工作。)

{
  "compilerOptions": {
    ...
    "module": "umd",
  }
}
  1. 在安装了该库的任何项目中,您都可以通过执行以下操作来选择您的规则。 编辑您的tslint.json并将已安装的 node_modules tslint-rules 添加到您的tslint.json 然后,将您的特定规则添加到规则列表中。
  "rulesDirectory": [
    // ...,
    "node_modules/<my-package>/esm2015/lib/tslint-rules"
  ],

然后,添加您配置的规则,如下所示:

  "rules": {
    // ...,
    "my-custom-rule": true,
    // ...
  }
  1. 或者,您也可以在您的库中设置一个tslint-default.json ,并在运行ng build后将其复制到您的 dist 文件夹中。 这应该添加了规则目录和自定义规则的默认设置。

然后,当你在其他地方安装这个包时,你只需要从安装的 node_modules 文件夹中扩展这个tslint-default.json

希望这可以帮助任何试图构建 Angular 库并包含自定义 TSLint 规则的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM