angular - 使用 Angular 7 和 `ng lint` 在 TypeScript 中自定义 TSLint 规则
问题描述
我有一个我正在维护的库的新工作区。我们有 2 个在 Angular 5 中使用的自定义 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.
解决方案
好的,所以我想通了。如果你想在你的 Angular 库中包含自定义 TSLint 规则,你需要做一些事情。
确保它们被导出到您的
public_api.ts
. 这将确保在您运行时ng build <library-name>
,TypeScript 编译器会拾取这些文件并编译它们并将它们放入dist
文件夹中。配置您
tsconfig.lib.json
使用非 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
在库中设置 a ,并在运行后将其复制到 dist 文件夹中ng build
。这应该添加了规则目录和自定义规则的默认设置。
然后,当你在别处安装这个包时,你只需tslint-default.json
要从安装的 node_modules 文件夹中扩展它。
希望这可以帮助任何尝试构建 Angular 库并包含自定义 TSLint 规则的人。
推荐阅读
- c# - WPF用C#覆盖资源字典中的键
- php - 容器看不到其中预建的供应商文件夹
- azure - Azure DevOps Pipeline:将发布工件 (webapp.zip) 下载到特定服务器或 PC 的本地目录
- ios - 如何在 SwiftUI 中创建自定义形状的 TabBar
- r - str_extract_all 带十进制数字
- ansible - 多个主机提示正在工作,但执行有问题
- javascript - Vuex 4,组件中的状态为空
- botframework - 占位符在 Android 应用程序的 MS 团队消息扩展自适应卡中不可见
- macos - 我可以检查哪个应用程序打开了 .zshrc 吗?
- sql - 如何在sql查询中使用exists函数?