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)
小智 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)
有三种情况会导致此警告。
在下面的解释中,我将假设一个src/scripts/example.ts导致警告的文件。
场景 1)您包含了错误的路径。例如src/scts/example.ts
场景 2)您创建了文件,但未将其包含在项目中的任何位置。
场景 3)您尝试使用 import() 异步导入它,但您没有在项目内的任何地方同步导入它。
Angular + Webpack 需要知道文件在哪里。当您在至少一个属于 angular 应用程序(组件、服务、指令、管道、模块等)的项目文件中同步导入它时,由于该导入语句,angular 将检测并记住此打字稿模块存在。
但是,如果您创建 .ts 文件而没有将其导入任何地方,可能是因为您想稍后在运行时动态导入它,那么您需要将它包含在 .ts 文件中
tsconfig.app.json。不是在tsconfig.json,这很重要!
附加"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)
你几乎正确地完成了它,但它需要一些更正:
"include"../node_modules,而不是裸node_modulesinclude,否则您的代码将不会被编译所以正确的方法是:
"include": [
".",
"../node_modules/@wtw/**/*"
]
Run Code Online (Sandbox Code Playgroud)
我通过添加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)