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

时间:2019-03-08 18:54:42

标签: angular typescript angular-cli tslint

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

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

如何告诉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.

1 个答案:

答案 0 :(得分:0)

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

  1. 确保已将它们导出到您的public_api.ts中。这样可以确保在运行ng build <library-name>时,TypeScript编译器将拾取这些文件并进行编译,然后将它们放在dist文件夹中。

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

{
  "compilerOptions": {
    ...
    "module": "umd",
  }
}
  1. 在安装了此库的任何项目中,您可以执行以下操作来挑选规则。编辑您的tslint.json并将已安装的node_modules tslint规则添加到您的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规则的人有所帮助。