Angular 10: невозможно написать ссылку

Я пробовал обновиться с angular 8 до 10, следуя руководству по обновлению angular.

Мой проект состоит из основного приложения, общего (2 библиотеки, карта Google и общие компоненты) и одного дополнительного apk fsm ​​(2 библиотеки, приложение и его метаданные).

Сборка ядра и общего доступа проходит, но сборка fsm выдает ошибку ОШИБКА: невозможно написать ссылку на ChipComponent в C: /Users/PATH/fsm-frontend/node_modules/shared-frontend/src/components/chip/chip.component. ts из C: ошибка /Users/PATH/fsm-frontend/node_modules/shared-frontend/src/components/chip/chip.module.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 также проходит ..

Кстати, я связываю как общий (карта и интерфейс), так и fsm (интерфейс и метаданные) с ядром через ссылку npm и делюсь с fsm через ссылку npm

РЕДАКТИРОВАТЬ: имеет ли значение порядок экспорта в файлах ствола?


person ssapp    schedule 29.10.2020    source источник
comment
Похоже на эту проблему: github.com/angular/angular/issues/29361   -  person inorganik    schedule 29.10.2020
comment
@inorganik Я видел эту ветку и, к сожалению, не решил мою проблему. Я попытался изменить пути с dist на проекты и добавить rootDir: '.' в оба файла tsconfig   -  person ssapp    schedule 29.10.2020


Ответы (1)


Потратив 20 минут на поиск аналогичной ошибки ... я только что понял, что на самом деле ошибка - всего лишь линтинг!

Я использую NX и поэтому импортирую многие из моих библиотек, используя собственные пути TS, такие как @my-workspace/my-lib.

При разработке этой функции я не осознавал, что моя IDE импортировала файл из другой библиотеки с относительным путем (вместо настраиваемого пути TS с @).

Таким образом, файл, который я пытался импортировать, технически отсутствовал в rootDir (в tsconfig).

Все, что мне нужно было сделать, это (запустить мой линтинг и понять, что он терпит неудачу) + заменить весь мой относительный импорт других библиотек на абсолютный импорт с использованием настраиваемого пути TS.

person maxime1992    schedule 12.02.2021