TypeScript 编译中缺少 ts。请通过“文件”或“包含”属性确保它在您的 tsconfig 中

Tom*_*Tom 46 typescript angular

我已将 angular 4 应用程序升级到 angular 6。我基本上有两个项目。父项目在子项目中被打包和引用。下面的屏幕截图显示了在客户端项目中引用的名为 @wtw 的父项目文件夹。@wtw 文件夹位于 node_modules 文件夹下。子项目在 Angular 版本 4 中构建父包很好。自从升级到 6 后,它抱怨 wtw 文件夹下的 ts 文件似乎从 TypeScript 编译中丢失了。我是否需要在 tsConfig 文件中明确包含路径。

我尝试在 tsConfig 中添加以下内容但没有区别

"inlcude": [
    "node_modules/@wtw/**/*"
  ]
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

ts配置文件

{
  "compileOnSave": false,

  "compilerOptions": {
    "outDir": "./dist/out-tsc",
    "baseUrl": "src",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types",
      "type-definition"
    ],
    "lib": [
      "es2017",
      "dom"
    ]
  },
  "inlcude": [
    "node_modules/@wtw/**/*"
  ]
}
Run Code Online (Sandbox Code Playgroud)

angular.json 文件

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "newProjectRoot": "projects",
  "projects": {
    "app": {
      "root": "",
      "sourceRoot": "src",
      "projectType": "application",
      "prefix": "irm",
      "schematics": {},
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "../wwwroot",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "src/tsconfig.app.json",
            "assets": [
              "src/assets",
              "src/favicon.ico",
              "src/favicon.png",
              "src/web.config",
              {
                "glob": "**/*",
                "input": "../node_modules/@wtw/platform/assets",
                "output": "./assets"
              },
              {
                "glob": "**/*",
                "input": "../assets",
                "output": "./assets"
              }
            ],
            "styles": [
              "../IRM.ClientSide/node_modules/@wtw/platform/styling/platform.scss"
            ],
            "scripts": [
              "../IRM.ClientSide/node_modules/jsoneditor/dist/jsoneditor.js"
            ]
          },
          "configurations": {
            "production": {
              "fileReplacements": [
                {
                  "replace": "environments/environment.ts",
                  "with": "environments/environment.prod.ts"
                }
              ],
              "optimization": true,
              "outputHashing": "all",
              "sourceMap": false,
              "extractCss": true,
              "namedChunks": false,
              "aot": false,
              "extractLicenses": true,
              "vendorChunk": false,
              "buildOptimizer": true
            }
          }
        },
        "serve": {
          "builder": "@angular-devkit/build-angular:dev-server",
          "options": {
            "browserTarget": "app:build"
          },
          "configurations": {
            "production": {
              "browserTarget": "app:build:production"
            }
          }
        },
        "extract-i18n": {
          "builder": "@angular-devkit/build-angular:extract-i18n",
          "options": {
            "browserTarget": "app:build"
          }
        },
        "test": {
          "builder": "@angular-devkit/build-angular:karma",
          "options": {
            "main": "test.ts",
            "polyfills": "polyfills.ts",
            "tsConfig": "tsconfig.spec.json",
            "karmaConfig": "karma.conf.js",
            "styles": [],
            "scripts": [],
            "assets": []
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": [
              "src/tsconfig.app.json",
              "src/tsconfig.spec.json"
            ],
            "exclude": [
              "**/node_modules/**/*",
              "**/src/app/api/**/*",
              "**/src/polyfills.ts",
              "**/node_modules/**/*",
              "**/src/app/api/**/*",
              "**/src/polyfills.ts",
              "**/node_modules/**/*",
              "**/src/app/api/**/*",
              "**/src/polyfills.ts"
            ]
          }
        }
      }
    },
    "pdf": {
      "root": "src",
      "sourceRoot": "src",
      "projectType": "application",
      "prefix": "irm",
      "schematics": {},
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "../pdf",
            "index": "pdf.html",
            "main": "pdf.ts",
            "polyfills": "polyfills.ts",
            "tsConfig": "tsconfig.app.json",
            "assets": [
              "assets",
              "favicon.ico",
              {
                "glob": "**/*",
                "input": "../node_modules/@wtw/platform/assets",
                "output": "./assets"
              }
            ],
            "styles": [
              "./styles.scss"
            ],
            "scripts": []
          },
          "configurations": {
            "production": {
              "fileReplacements": [
                {
                  "replace": "environments/environment.ts",
                  "with": "environments/environment.prod.ts"
                }
              ],
              "optimization": true,
              "outputHashing": "all",
              "sourceMap": false,
              "extractCss": true,
              "namedChunks": false,
              "aot": false,
              "extractLicenses": true,
              "vendorChunk": false,
              "buildOptimizer": true
            }
          }
        },
        "serve": {
          "builder": "@angular-devkit/build-angular:dev-server",
          "options": {
            "browserTarget": "app:build"
          },
          "configurations": {
            "production": {
              "browserTarget": "app:build:production"
            }
          }
        },
        "extract-i18n": {
          "builder": "@angular-devkit/build-angular:extract-i18n",
          "options": {
            "browserTarget": "app:build"
          }
        },
        "test": {
          "builder": "@angular-devkit/build-angular:karma",
          "options": {
            "main": "test.ts",
            "polyfills": "polyfills.ts",
            "tsConfig": "tsconfig.spec.json",
            "karmaConfig": "karma.conf.js",
            "styles": [],
            "scripts": [],
            "assets": []
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": [
              "src/tsconfig.app.json",
              "src/tsconfig.spec.json"
            ],
            "exclude": [
              "**/node_modules/**/*",
              "**/src/app/api/**/*",
              "**/src/polyfills.ts",
              "**/node_modules/**/*",
              "**/src/app/api/**/*",
              "**/src/polyfills.ts",
              "**/node_modules/**/*",
              "**/src/app/api/**/*",
              "**/src/polyfills.ts"
            ]
          }
        }
      }
    },
    "app-e2e": {
      "root": "e2e/",
      "projectType": "application",
      "architect": {
        "e2e": {
          "builder": "@angular-devkit/build-angular:protractor",
          "options": {
            "protractorConfig": "e2e/protractor.conf.js",
            "devServerTarget": "app:serve"
          },
          "configurations": {
            "production": {
              "devServerTarget": "app:serve:production"
            }
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": "e2e/tsconfig.e2e.json",
            "exclude": [
              "**/node_modules/**"
            ]
          }
        }
      }
    }
  },
  "defaultProject": "app"
}
Run Code Online (Sandbox Code Playgroud)

Ali*_*eli 20

我遇到了同样的问题,经过 2 个小时的搜索,我终于找到了解决方案。就我而言(我使用的是 Angular),我只是将打字稿相关路径设置为tsconfig.app.json(注意:文件名不是tsconfig.json)。另一种方法是将整个打字稿路径设置为文件中的include部分tsconfig.app.json(参见下面的示例)。

tsconfig.app.json变化:

"files": [
    ...,
    "node_modules/jqwidgets-scripts/jqwidgets-ts/angular_jqxbargauge.ts"
  ],
Run Code Online (Sandbox Code Playgroud)

或者

"include": [
    ...,
    "node_modules/jqwidgets-scripts/jqwidgets-ts/**/*.ts"
  ],
Run Code Online (Sandbox Code Playgroud)

  • Angular + Webpack 需要知道 .ts 文件所在的位置。如果您将该文件导入到 Angular 文件(组件、服务、指令等)中,那么它将起作用。如果你尝试使用 import() 动态导入它并且你没有以常规(同步)方式将它导入到其他地方,那么 webpack 将无法找到它。因此,这就是为什么您需要在 tsconfig.app.json 内的 include 属性中声明它 (4认同)

小智 15

在我的情况下,在另一个组件中导入类时出现案例错误:

import { MyClass } from '../../../shared/models/Myclass';
Run Code Online (Sandbox Code Playgroud)

该文件被称为MyClass.ts(大写 C)并从../../../Myclass(小写 c)导入。


Sam*_*ath 14

05-09-2020

角 10

我的问题是由于复制/粘贴错误导致组件路径无效:D

错误的:

import { RegisterComponent } from './Register/Register.component';
Run Code Online (Sandbox Code Playgroud)

正确的:

import { RegisterComponent } from './register/register.component';
Run Code Online (Sandbox Code Playgroud)


bab*_*ris 8

有三种情况会导致此警告。

在下面的解释中,我将假设一个src/scripts/example.ts导致警告的文件。

场景 1)您包含了错误的路径。例如src/scts/example.ts

场景 2)您创建了文件,但未将其包含在项目中的任何位置。

场景 3)您尝试使用 import() 异步导入它,但您没有在项目内的任何地方同步导入它。

Angular + Webpack 需要知道文件在哪里。当您在至少一个属于 angular 应用程序(组件、服务、指令、管道、模块等)的项目文件中同步导入它时,由于该导入语句,angular 将检测并记住此打字稿模块存在。

但是,如果您创建 .ts 文件而没有将其导入任何地方,可能是因为您想稍后在运行时动态导入它,那么您需要将它包含在 .ts 文件中 tsconfig.app.json。不是在tsconfig.json,这很重要!


V.7*_*V.7 7

附加"preserveSymlinks": true可能会有所帮助。当working directory路径包含符号链接时它会有所帮助。

例如:

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "newProjectRoot": "projects",
  "projects": {
    "app": {
      "root": "",
      "sourceRoot": "src",
      "projectType": "application",
      "prefix": "irm",
      "schematics": {},
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "../wwwroot",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "preserveSymlinks": true,
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用。我执行了以下操作:将另一个项目的文件夹符号链接到我当前的项目中;然后更改“tsconfig.app.json”(Angular 11)中的 INCLUDE 部分,并将“preserveSymlinks”:true 添加到文件“angular.json”中 (3认同)

Mik*_*eyn 5

你几乎正确地完成了它,但它需要一些更正:

  1. 你的键有错别字 "include"
  2. 您需要在 下包含目录../node_modules,而不是裸node_modules
  3. 您还需要将项目目录包含到include,否则您的代码将不会被编译

所以正确的方法是:

"include": [
    ".",
    "../node_modules/@wtw/**/*"
]
Run Code Online (Sandbox Code Playgroud)


Ara*_*vin 5

我通过添加zone-flags.tstsconfig.app.ts 文件部分解决了同样的问题,如下所示

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "outDir": "./out-tsc/app",
    "types": []
  },
  "angularCompilerOptions": {
    "enableIvy": true
  },
  "files": [
    "src/main.ts",
    "src/polyfills.ts",
    "src/zone-flags.ts", <--- This resolved
  ],
  "include": [
    "src/**/*.d.ts"
  ]
}
Run Code Online (Sandbox Code Playgroud)