使用 Angular 7 和 `ng lint` 在 TypeScript 中自定义 TSLint 规则
Custom TSLint Rule in TypeScript with Angular 7 and `ng lint`
我为正在维护的库创建了一个新工作区。我们有 2 个我们在 Angular 5 中使用的自定义 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 规则,则需要做一些事情。
确保它们在您的 public_api.ts
中导出。这将确保当您 运行 ng build <library-name>
TypeScript 编译器将拾取这些文件并编译它们并将它们放入 dist
文件夹中。
配置您的 tsconfig.lib.json
以使用 non-es6/es2015 模块。这就是给我带来很多问题的原因。似乎 TSLint 不支持 es2015 样式模块。我已将其切换为使用 umd
。 (我还注意到 commonjs
也工作得很好。)
{
"compilerOptions": {
...
"module": "umd",
}
}
- 在安装了这个库的任何项目中,您可以通过执行以下操作来选择您的规则。编辑您的
tslint.json
并将安装的 node_modules tslint-rules 添加到您的 tslint.json
。然后,将您的特定规则添加到规则列表中。
"rulesDirectory": [
// ...,
"node_modules/<my-package>/esm2015/lib/tslint-rules"
],
然后,添加您配置的规则如下:
"rules": {
// ...,
"my-custom-rule": true,
// ...
}
- 或者,您也可以在您的库中设置一个
tslint-default.json
,并在 运行 宁 ng build
之后将其复制到您的 dist 文件夹中。这应该添加了规则目录和自定义规则的默认设置。
然后,当你在其他地方安装这个包时,你只需要从安装的 node_modules 文件夹扩展这个 tslint-default.json
。
希望这对尝试构建 Angular 库并包含自定义 TSLint 规则的任何人有所帮助。
我为正在维护的库创建了一个新工作区。我们有 2 个我们在 Angular 5 中使用的自定义 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 规则,则需要做一些事情。
确保它们在您的
public_api.ts
中导出。这将确保当您 运行ng build <library-name>
TypeScript 编译器将拾取这些文件并编译它们并将它们放入dist
文件夹中。配置您的
tsconfig.lib.json
以使用 non-es6/es2015 模块。这就是给我带来很多问题的原因。似乎 TSLint 不支持 es2015 样式模块。我已将其切换为使用umd
。 (我还注意到commonjs
也工作得很好。)
{
"compilerOptions": {
...
"module": "umd",
}
}
- 在安装了这个库的任何项目中,您可以通过执行以下操作来选择您的规则。编辑您的
tslint.json
并将安装的 node_modules tslint-rules 添加到您的tslint.json
。然后,将您的特定规则添加到规则列表中。
"rulesDirectory": [
// ...,
"node_modules/<my-package>/esm2015/lib/tslint-rules"
],
然后,添加您配置的规则如下:
"rules": {
// ...,
"my-custom-rule": true,
// ...
}
- 或者,您也可以在您的库中设置一个
tslint-default.json
,并在 运行 宁ng build
之后将其复制到您的 dist 文件夹中。这应该添加了规则目录和自定义规则的默认设置。
然后,当你在其他地方安装这个包时,你只需要从安装的 node_modules 文件夹扩展这个 tslint-default.json
。
希望这对尝试构建 Angular 库并包含自定义 TSLint 规则的任何人有所帮助。