Angular 10:无法编写参考

Posted

技术标签:

【中文标题】Angular 10:无法编写参考【英文标题】:Angular 10: Unable to write a reference 【发布时间】:2021-02-12 01:17:40 【问题描述】:

我尝试按照角度更新指南从角度 8 升级到 10。

我的项目由核心应用程序、共享(2 个库、谷歌地图和共享组件)和一个额外的 apk fsm(2 个库、应用程序及其元数据)组成。

核心和共享的构建正在通过,但 fsm 构建失败并显示“错误:无法在 C:/Users/PATH/fsm-frontend/node_modules/shared-frontend/src/components/chip/ 中写入对 ChipComponent 的引用来自 C:/Users/PATH/fsm-frontend/node_modules/shared-frontend/src/components/chip/chip.module.ts 的chip.component.ts " 错误。

ChipComponent 本身没有问题,但可能在某些导入或 tsconfig 中。

共享 tsconfig.json:


    "compileOnSave": false,
    "compilerOptions": 
        "baseUrl": "./",
        "downlevelIteration": true,
        "importHelpers": true,
        "outDir": "./dist/out-tsc",
        "sourceMap": true,
        "declaration": false,
        "module": "es2020",
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "target": "es2015",
        "typeRoots": [
            "node_modules/@types"
        ],
        "lib": [
            "es2017",
            "dom"
        ],
        "paths": 
            "shared-frontend": [
                "dist/shared-frontend"
            ],
            "shared-frontend/*": [
                "dist/shared-frontend/*"
            ],
            "map": [
                "dist/map"
            ],
            "map/*": [
                "dist/map/*"
            ]
        
    

FSM tsconfig.json:


    "compileOnSave": false,
    "compilerOptions": 
        "baseUrl": "./",
        "importHelpers": true,
        "outDir": "./dist/out-tsc",
        "sourceMap": true,
        "declaration": false,
        "module": "es2020",
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "target": "es2015",
        "typeRoots": [
            "node_modules/@types"
        ],
        "lib": [
            "es2017",
            "dom"
        ],
        "paths": 
            "fsm-frontend": [
                "dist/fsm-frontend"
            ],
            "fsm-frontend/*": [
                "dist/fsm-frontend/*"
            ],
            "@angular/*": [
                "./node_modules/@angular/*"
            ],
            "rxjs": [
                "./node_modules/rxjs"
            ],
            "zone.js": [
                "./node_modules/zone.js"
            ],
            "@ngx-translate/*": [
                "./node_modules/@ngx-translate/*"
            ],
            "shared-frontend": [
                "./node_modules/shared-frontend"
            ],
            "primeng": [
                "./node_modules/primeng"
            ],
            "tslib": [
                "./node_modules/tslib"
            ],
            "fsm-metadata": [
                "dist/fsm-metadata"
            ],
            "fsm-metadata/*": [
                "dist/fsm-metadata/*"
            ]
        
    

ng-package.json


  "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
  "dest": "../../dist/shared-frontend",
  "lib": 
    "entryFile": "src/public_api.ts"
  

共享结构:

projects - map
              - shared-frontend
                     -src
                           - ...
                           -components
                                       -...
                                       -chip
                                             -chip.component.ts
                                             -chip.module.ts
                                        -index.ts 

                      -lib
                         -shared-frontend.module.ts
                       ...
                       pubic_api.ts

shared-frontend.module.ts:

... // exports including:
export * from '../components/index';
@NgModule(
    imports: [CommonModule],
    exports: [
        CommonModule,
...
        ChipModule,
...
    ]
)
export class SharedModule 
    static forRoot(): ModuleWithProviders<SharedModule> 
        return 
            ngModule: SharedModule,
            providers: [
                SERVICES.....
            ]
        ;
    

来自芯片的 index.ts:

...
export * from './chip/chip.module';
export * from './chip/chip.component';
...

pubic_api.ts

export * from './lib/hive-shared-frontend.module';

ng serve 也可以,但 apk 看起来它没有使用共享中的任何内容。 ng build fsm-frontend --prod 也通过了..

顺便说一句,我通过 npm 链接将共享(地图和前端)和 fsm(前端和元数据)链接到核心,并通过 npm 链接共享到 fsm

编辑:桶文件中的导出顺序重要吗?

【问题讨论】:

看起来像这个问题:github.com/angular/angular/issues/29361 @inorganik 我看到了那个帖子,不幸的是没有解决我的问题。我尝试将路径从 dist 更改为项目并添加 rootDir :'.'到两个 tsconfig 文件 【参考方案1】:

我正在同一个项目中构建一个库和一个应用程序。我的问题是在自动导入接口定义时出现的。引用的路径是公共 api 文件而不是库。

自动导入创建: 从 'projects/mylib/src/public-api' 导入 AbcInterface

需要 从“@mylib”导入 AbcInterface

因此,请在您的应用程序中全局搜索 'projects/ 并更改您的引用。

【讨论】:

【参考方案2】:

在花费 2000 万寻找类似的错误之后......我才意识到实际的错误只是一个 linting 错误!

我正在使用 NX,因此我通过使用自定义 TS 路径(如 @my-workspace/my-lib)来导入我的许多库。

在开发该功能时,我没有意识到我的 IDE 从另一个库中导入了具有相对路径的文件(而不是带有@ 的自定义 TS 路径)。

因此,我尝试导入的文件在技术上不属于 rootDir(在 tsconfig 中)。

我所要做的就是(运行我的 linting 并意识到它失败了)+ 使用自定义 TS 路径将我对其他库的所有相对导入替换为绝对导入。

编辑:这又一次发生在我身上,原因不同!所以也分享那个新的。

我有一个库,我决定将其拆分为子条目,以便它们可以被摇树。也就是说,在我的package.json 中定义的库的名称(库的,而不是顶层的)是错误的。确保它与您要导入的内容匹配。

编辑:我可以确认我再次被这个咬了,但由于 lib package.json 中的错误名称和晦涩的错误,我仍然设法松开了 1h...

【讨论】:

以上是关于Angular 10:无法编写参考的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Angular 8 项目在安装 Angular 10 cli 后无法启动?

使用 Angular Promise 进行 Jasmine 测试无法使用 TypeScript 解决

运行我用 Angular js 编写的代码并收到一条我无法解决的错误消息

Angular 5 无法读取来自 Spring 应用程序的响应标头 [重复]

VS Code - Angular 1/TypeScript - 删除 /// 参考时无法识别“角度”

Angular 10.2 构建:本地化包生成失败:无法读取未定义的属性“值”