TypeScript/TSLint:TSLint无法通过baseUrl识别根相对导入



根据这个解决方案,我通过tsconfig.json中的baseUrl编译器选项使用根相对导入,但我遇到了一个问题,Atom IDE向我显示了如下错误:

Cannot find module 'core/nav-menu/nav-menu.component'.

导入看起来像(在src/app/core/nav-menu.module.ts中(:

import { NavMenuComponent } from 'core/nav-menu/nav-menu.component';

Atom中的TSLint找不到根相关的导入文件,但Angular编译器对它们没有问题。

我不确定我的tslint.json配置是否错误。。。在我在同一台机器上的另一个项目中,所有这些都如预期的那样工作,但我无法发现这个项目有什么不同,导致了这个问题。

tslint.json:

{
"rulesDirectory": [
"node_modules/codelyzer"
],
"rules": {
"arrow-return-shorthand": true,
"callable-types": true,
"class-name": true,
"comment-format": [
true,
"check-space"
],
"curly": true,
"deprecation": {
"severity": "warn"
},
"eofline": true,
"forin": true,
"import-blacklist": [
true,
"rxjs/Rx"
],
"import-spacing": true,
"indent": [
true,
"spaces"
],
"interface-over-type-literal": true,
"label-position": true,
"max-line-length": [
true,
140
],
"member-access": false,
"member-ordering": [
true,
{
"order": [
"static-field",
"instance-field",
"static-method",
"instance-method"
]
}
],
"no-arg": true,
"no-bitwise": true,
"no-console": [
true,
"debug",
"time",
"timeEnd",
"trace"
],
"no-construct": true,
"no-debugger": true,
"no-duplicate-super": true,
"no-empty": false,
"no-empty-interface": true,
"no-eval": true,
"no-inferrable-types": [
true,
"ignore-params"
],
"no-misused-new": true,
"no-non-null-assertion": true,
"no-shadowed-variable": true,
"no-string-literal": false,
"no-string-throw": true,
"no-switch-case-fall-through": true,
"no-trailing-whitespace": true,
"no-unnecessary-initializer": true,
"no-unused-expression": true,
"no-use-before-declare": true,
"no-var-keyword": true,
"object-literal-sort-keys": false,
"one-line": [
true,
"check-open-brace",
"check-catch",
"check-else",
"check-whitespace"
],
"prefer-const": true,
"quotemark": [
true,
"single"
],
"radix": true,
"semicolon": [
true,
"always"
],
"triple-equals": [
true,
"allow-null-check"
],
"typedef-whitespace": [
true,
{
"call-signature": "nospace",
"index-signature": "nospace",
"parameter": "nospace",
"property-declaration": "nospace",
"variable-declaration": "nospace"
}
],
"unified-signatures": true,
"variable-name": false,
"whitespace": [
true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
],
"no-output-on-prefix": true,
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"use-life-cycle-interface": true,
"use-pipe-transform-interface": true,
"component-class-suffix": true,
"directive-class-suffix": true
}
}

src/tslint.json:

{
"extends": "../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"s2es",
"camelCase"
],
"component-selector": [
true,
"element",
"s2es",
"kebab-case"
]
}
}

tsconfig.json:

{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "app",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2017",
"dom"
]
}
}

src/tsconfig.app.json:

{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"module": "es2015",
"types": [],
"baseUrl": "app",
"types": ["node"]
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

附带说明一下,为什么baseUrl: "app"不是默认值?为什么文件相对导入看起来像是Angular/TypeScript开发的标准。这太疯狂了。

您的基本url错误:

您的tsconfig.json必须设置为:"baseurl": "./"

你的tsconfig.app.ts中不需要baseurl,它应该被删除。

正如评论中所建议的那样,导入路径也应该更新。在导入路径前面添加"src/app"。

如果您的结构如下,并且您正在运行Angular 6:,则适用于此

* project
| - src
| | - app (with app files like app.modules.ts)
| | - tsconfig.app.json
| - tsconfig.json

也许你篡改了文件,试图找出问题所在。这也是新生成的Angular项目的标准配置。

最新更新