如何配置 Angular 项目 tsconfig 路径 [] 而不会出现 linting 错误?

Posted

技术标签:

【中文标题】如何配置 Angular 项目 tsconfig 路径 [] 而不会出现 linting 错误?【英文标题】:how to configure an angular project tsconfig paths[] without linting errors? 【发布时间】:2019-03-05 10:15:45 【问题描述】:

我们的 tsconfig.ts

中有以下配置

  "compileOnSave": false,
  "compilerOptions": 
    "baseUrl": "src",
    "paths": 
      "@app/*": ["app/*"],
      "@pages/*": ["app/pages/*"]
      ...
    ,

然后我们可以在其他 ts 文件中使用更简洁的导入,如下所示:

import UrlConstants from '@app/common/constants/url-constants';

linting 项目时出现问题:

Module '@app/common' is not listed as dependency in package.json

有什么方法可以解决这个问题而不用回到使用 ./***/***/ 进行导入?

【问题讨论】:

您显然正在使用自定义 lint 规则,并且该 lint 规则已损坏。禁用规则并提交问题 @AluanHaddad 自定义 lint 规则? palantir.github.io/tslint/rules/no-implicit-dependencies这是我认为的规则。 啊,这是官方规则的一部分。感谢您的参考。您可以按照说明禁用规则或白名单模块。我仍然说这是规则中的错误。在许多情况下,路径不仅仅是一种便利。 好吧,我认为我没有回答任何问题,因为您自己刚刚链接的文档显示了如何使用白名单配置规则。我要补充的是我对路径映射很重要的脾气暴躁的看法。 @AluanHaddad 我正在尝试了解如何根据我提供的文档创建白名单,但我做不到。你能举个例子/提示吗?谢谢!还有一个有趣的话题:github.com/palantir/tslint/issues/3364 【参考方案1】:

您可以使用此处记录的白名单配置规则https://palantir.github.io/tslint/rules/no-implicit-dependencies

看起来像这样:

tslint.json


  "rules": 
    "no-implicit-dependencies": [
      true,
      [
        "app",
        "pages"
      ],
      "dev"
    ]
  

“dev”选项并不真正适合您的场景,但如果您按照我喜欢的方式对测试进行 lint,它会很有用。

就个人而言,我认为该规则应该更聪明,并尝试在某种程度上解析路径的 tsconfig。有时一个人有很多路径,并不是每个人都使用 NPM。 JSPM 用户可能不得不禁用该规则,这是一种耻辱,因为如果您没有达到这个粗糙的边缘,该规则非常有动力并且非常有用。

这现在应该适用于 @ 前缀路径,因为 https://github.com/palantir/tslint/pull/4192 已合并。在升级之前,您可能需要使用 "app""pages"

【讨论】:

@DenissM。该死的,在 github.com/palantir/tslint/pull/4192 合并之前,这似乎不适用于 @ 前缀路径 是的,在浏览他们的 github 时也有这种印象……那么我们有两个选择 - 将全部重命名为 app(不带 @)或切换回常规导入。 或者关闭规则,直到他们修复了该死的东西。这绝对是我会做的。

以上是关于如何配置 Angular 项目 tsconfig 路径 [] 而不会出现 linting 错误?的主要内容,如果未能解决你的问题,请参考以下文章

Angular : 什么是tsconfig.json

Angular 2 - tsconfig outDir

Angular 应用 tsconfig.json 文件里的 typeRoots 属性讲解

#私藏项目实操分享# 如何解决 Angular custom library module 在 ng build 时无法被识别的错误

angular项目中各个文件的作用

将 .tsconfig 和 .tslint 文件移动到不同的目录