Angular 10 Не удается прочитать свойство 'bindingStartIndex' со значением null при использовании библиотеки при рендеринге компонента из другой рабочей области

Я создал Angular-Library, которая находится за пределами моей рабочей области приложения. В результате у меня есть два разных рабочих пространства.

Моим первым подходом было создание библиотеки и связывание папки / dist с моим приложением. Это сработало не так хорошо с ng serve, но в любом случае у меня возникла проблема с отображением моих шаблонов компонентов библиотеки.

ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'bindingStartIndex' of null
TypeError: Cannot read property 'bindingStartIndex' of null
[...]

Выполняя свое первое исследование, я обнаружил, что эта проблема с github находится в сообщении

В основном данное решение состоит в том, чтобы добавить мой путь из моей библиотеки public-api.ts в мой tsconfig.json, который можно импортировать внутри моих источников приложения. Нравится:

    "paths": {
    "@app/*": ["src/app/*"],
      "@core": ["src/app/@core"],
    "@core/*": ["src/app/@core/*"],
    "@shared": ["src/app/@shared"],
    "@shared/*": ["src/app/@shared/*"],
      "@env/*": ["src/environments/*"],
      "@myLibrary/*": ["../myLibrary/projects/myLibrary/src/public-api"]
  }

Почему-то у меня все еще возникает та же проблема при рендеринге моего шаблона.

Из-за этого мой последний подход заключался в том, чтобы просто импортировать мой lib-Component прямо из моего app.module.ts

import { TestComponent } from '../../../../myLibrary/projects/myLibrary/src/lib/components/testComponent/test.component';
   @NgModule({
     imports: [
       FlexLayoutModule,
       CelNgZuiModule,
       CommonModule
   ],
   declarations: [FactoryModelComponent, TestComponent,]
   })

И результат тот же. Я по-прежнему получаю ту же ошибку при рендеринге моего шаблона. И этот подход сейчас меня очень смущает. Я имею в виду, что я только что импортировал .ts-файл из другого места. Использование компонентов из моего приложения или внедрение сервисов из моей библиотеки работают нормально.

Test.component

import { Component, OnInit } from '@angular/core';

@Component({
   selector: 'cel-test',
   template: '<p> should work fine </p>',
})
export class TestComponent implements OnInit {

constructor() {
    console.log("it is working");
}

ngOnInit() {
}

}

App-angular.json

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "newProjectRoot": "projects",
  "projects": {
    "mes-demo": {
      "projectType": "application",
      "schematics": {
        "@schematics/angular:component": {
          "style": "scss"
        }
      },
      "root": "",
      "sourceRoot": "src",
      "prefix": "app",
      "architect": {
        "build": {
          "preserveSymlinks": true,
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "dist",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "tsconfig.app.json",
            "aot": true,
            "assets": [
              "src/favicon.ico",
              "src/apple-touch-icon.png",
              "src/robots.txt",
              "src/manifest.webmanifest",
              "src/assets"
            ],
            "styles": [
              "src/main.scss"
            ],
            "scripts": []
          },
          "configurations": {
            "production": {
              "optimization": true,
              "outputHashing": "all",
              "sourceMap": true,
              "extractCss": true,
              "namedChunks": false,
              "extractLicenses": true,
              "vendorChunk": false,
              "buildOptimizer": true,
              "budgets": [
                {
                  "type": "initial",
                  "maximumWarning": "2mb",
                  "maximumError": "5mb"
                },
                {
                  "type": "anyComponentStyle",
                  "maximumWarning": "6kb",
                  "maximumError": "10kb"
                }
              ],
              "serviceWorker": true,
              "fileReplacements": [
                {
                  "replace": "src/environments/environment.ts",
                  "with": "src/environments/environment.prod.ts"
                }
              ]
            },
            "ci": {
              "progress": false
            }
          }
        },
        "serve": {
          "builder": "@angular-devkit/build-angular:dev-server",
          "options": {
            "browserTarget": "mes-demo:build",
            "hmr": true,
            "hmrWarning": false
          },
          "configurations": {
            "production": {
              "browserTarget": "mes-demo:build:production",
              "hmr": false
            },
            "ci": {
              "progress": false
            }
          }
        },
        "extract-i18n": {
          "builder": "@angular-devkit/build-angular:extract-i18n",
          "options": {
            "browserTarget": "mes-demo:build"
          }
        },
        "test": {
          "builder": "@angular-devkit/build-angular:karma",
          "options": {
            "main": "src/test.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "tsconfig.spec.json",
            "karmaConfig": "karma.conf.js",
            "scripts": [],
            "styles": [
              "src/main.scss"
            ],
            "assets": [
              "src/favicon.ico",
              "src/apple-touch-icon.png",
              "src/robots.txt",
              "src/manifest.webmanifest",
              "src/assets"
            ]
          },
          "configurations": {
            "ci": {
              "progress": false,
              "watch": false
            }
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": [
              "tsconfig.app.json",
              "tsconfig.spec.json",
              "e2e/tsconfig.json"
            ],
            "exclude": [
              "**/node_modules/**"
            ]
          }
        },
        "e2e": {
          "builder": "@angular-devkit/build-angular:protractor",
          "options": {
            "protractorConfig": "e2e/protractor.conf.js",
            "devServerTarget": "mes-demo:serve"
          },
          "configurations": {
            "production": {
              "devServerTarget": "mes-demo:serve:production"
            }
          }
        }
      }
    }
  },
  "defaultProject": "mes-demo"
}


person JanMod    schedule 25.09.2020    source источник


Ответы (3)


У меня была такая же проблема, и я решил ее следующим образом

Я вставил свойство preserveSymlinks в параметры файла angular.json, сделав его следующим образом

"projects.project-name.architect.build.options.preserveSymlinks": true

Затем я добавил его в файл tsconfig.json.

paths: {
   "@angular/*": [
      "./node_modules/@angular/*"
   ],
}

Надеюсь, я кому-то помог.

person Edson Vitor    schedule 09.01.2021
comment
У меня это сработало. Вы выяснили, почему возникла ошибка и почему сработало включение preserveSymlinks? Все еще пытаюсь разобраться в проблеме, но не могу найти причину - person Erbsenkoenig; 06.07.2021

Это также может произойти, если вы ссылаетесь на пути к файлам компонентов, которые находятся за пределами вашей текущей рабочей папки, или, в основном, если ваш синтаксис и структура для добавления компонентов отключены. Иногда помощь вашего редактора бесполезна, если вы не будете осторожны.

person Fito    schedule 12.03.2021

К счастью, я решил свою проблему, но, к сожалению, не знаю, как это сделать. Вчера я удалил все node_module в своем приложении. Может быть, это как-то решило мою проблему.

person JanMod    schedule 29.09.2020
comment
Я ценю этот ответ и рад, что вы смогли его решить, но я думаю, что удаление папки node_module, скорее всего, не является решением этой проблемы; это было не для члена моей команды, и я дал свой ответ тем глупым способом, которым мы его исправили. - person Fito; 12.03.2021