tslint 不排除角度项目中的 node_modules

Posted

技术标签:

【中文标题】tslint 不排除角度项目中的 node_modules【英文标题】:tslint not excluding node_modules in angular project 【发布时间】:2018-08-21 10:45:28 【问题描述】:

我尝试执行以下操作以从 tslint 中排除 node_modules。 但他们都没有解决这个问题。

如果是因为我调用 node_modules 文件夹的方式,我会感到困惑。

第一次尝试 - 在tsconfig.jsontsconfig-aot.json 中添加了以下内容

"exclude": [
    "../node_modules/**/*",
    "./node_modules/**/*",
    "node_modules",
    "node_modules/**/*.ts",
    "**/node_modules/**/*",
    "**/node_modules/**"
]

第二次尝试 - 将exclude 添加到.angular-cli.json 中的每个项目部分

"lint": [
        "project": "../../../tsconfig.json",
        "exclude": "./node_modules/*" // also tried **/node_modules/**/*
    ,
    
        "project": "../../../tsconfig-aot.json",
        "exclude": "./node_modules/*"
    
],

第三次尝试 - 使用 --exclude 选项执行 tslint-cli

tslint --exclude node_modules --project tsconfig-aot.json
tslint --exclude node_modules --project tsconfig.json

仍然没有变化。每当我执行yarn webpack:build 时,我仍然会从 node_modules 收到这些警告。

同样在tsconfig.jsontsconfig-aot.json中,已经有"skipLibCheck": true

更新

我安装了导致错误的 npm 模块 angular-select2-component。添加了 tslint 堆栈跟踪。

WARNING in ./node_modules/angular-select2-component/index.ts
[1, 41]: file should end with a newline

 @ ./src/main/webapp/app/home/home.module.ts 13:34-70
 @ ./src/main/webapp/app/app.module.ts
 @ ./src/main/webapp/app/app.main.ts

WARNING in ./node_modules/angular-select2-component/src/select2.component.ts
[22, 24]: Type boolean trivially inferred from a boolean literal, remove type annotation
[43, 22]: missing whitespace
[44, 40]: missing whitespace
[46, 14]: missing whitespace
[54, 45]: missing whitespace
[67, 14]: missing whitespace
[61, 32]: missing whitespace
[79, 18]: missing whitespace
[59, 51]: " should be '
[54, 33]: == should be ===
[35, 45]: missing whitespace
[44, 11]: missing whitespace
[54, 11]: missing whitespace
[61, 15]: missing whitespace
[30, 1]: Consecutive blank lines are forbidden
[13, 15]: The selector of the component "Select2Component" should be named kebab-case and include dash (https://angular.io/styleguide#style-05-02)

 @ ./node_modules/angular-select2-component/index.ts 6:9-43
 @ ./src/main/webapp/app/home/home.module.ts
 @ ./src/main/webapp/app/app.module.ts
 @ ./src/main/webapp/app/app.main.ts

WARNING in ./node_modules/angular-select2-component/src/custom-input.ts
[59, 2]: file should end with a newline
[20, 47]: missing whitespace

 @ ./node_modules/angular-select2-component/src/select2.component.ts 25:21-46
 @ ./node_modules/angular-select2-component/index.ts
 @ ./src/main/webapp/app/home/home.module.ts
 @ ./src/main/webapp/app/app.module.ts
 @ ./src/main/webapp/app/app.main.ts

【问题讨论】:

你能给我们你的 linting 的堆栈跟踪吗? 【参考方案1】:

问题不在于您的 tsconfig。事实上,它应该默认排除node_modules。问题是angular-select2-component 模块。它没有正确构建。

大多数打字稿模块都是这样构建的,在package.json 中有一个main,它指向一个JS 文件(项目的编译输出)。他们还在package.json 中有一个types 条目,它指向根类型定义文件.d.ts

您要导入的模块 (angular-select2-component) 将其 main 条目设置为 index.ts,这是一个 TypeScript 文件。它没有types 条目。这并非完全不受支持,它“可以工作”。 Typescript 基本上会将此模块视为第二个源文件夹。这意味着当你编译你的项目时,它也在编译angular-select2-component。将它从tsconfig.json 中排除并不重要,因为它必须被编译。如果您尝试排除一个源文件但它是由另一个源文件导入的,这将与您得到的结果相同。这也是skipLibCheck 被忽略的原因。

所以没有办法从编译中排除angular-select2-component,因为它是必需的。您也许可以使用@nickolay 的解决方案,该解决方案将其排除在 linting 之外,但将其保留以供编译。请注意,他对“解决方案 3”的实现使用了 glob,看起来您在尝试“解决方案 3”时并没有使用 glob。

【讨论】:

另外,缺乏包装似乎是一个悬而未决的问题(github.com/godbasin/angular-select2/issues/32),但已经有一年多了:耸耸肩:【参考方案2】:

同样标记 --type-check 用于 tslint 可能会从 node_modules 产生错误,只需在运行命令时删除标记 --type-check

例如

tslint -e \"node_modules/**/*.ts\" -p tsconfig.json -c tslint.json

而不是

tslint -e \"node_modules/**/*.ts\" -p tsconfig.json -c tslint.json --type-check

【讨论】:

【参考方案3】:

解决方案一:

尝试明确指定应该从哪个目录开始检查。最后是:

"scripts": 
    "lint": "tslint \"src/**/*.ts\"",
,

此解决方案仅在您的项目结构良好时才有效,即:

package.json
some-other.conf.js
src/here_is_app_code

解决方案二:


    "extends": [
      "tslint:recommended"
    ],
    "linterOptions": 
        "exclude": [
            "node_modules"
        ]
    

更多信息可以在this PR找到

解决方案三:

tslint \"./**/*.ts\" -e \"node_modules\"

-e--exclude的缩写,与this PR一起引入。

【讨论】:

能否请您对解决方案2和3添加一些解释? 在编辑后的答案中提供的链接中查找更多信息。 还有...? tslint 还有问题吗? 嗨..我已经尝试了所有解决方案,但令人惊讶的是没有一个有效。我放弃了导致问题的 node_module 并采用了不同的模块。

以上是关于tslint 不排除角度项目中的 node_modules的主要内容,如果未能解决你的问题,请参考以下文章

Eslint/Tslint 配置帮助(不包括文件)

是否可以在 tslint.json 中禁用 TSLint?

如何调试 TSLint 错误?

在 Angular 6 项目中使用 2 tslint.json 文件

使用 tslint:disable 为代码块禁用 tslint 不起作用

获取 tslint.json 文件中的所有 TsLint 规则