Библиотека Angular, экспортирующая автономные компоненты

Я создал библиотеку Angular с автономным компонентом:

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

@Component({
  selector: 'app-form-error',
  standalone: true,
  imports: [],
  template: `
  <ng-container>
    Hello, World!
  </ng-container>
  `,
})
export class FormErrorComponent {

}

Я экспортирую его на public-apis.ts.

export * from './lib/form-error.component';

Затем я импортирую его в другой проект в свой автономный компонент:

import { FormErrorComponent } from 'myLib/projects/form-error/src/public-api';
@Component({
  selector: 'app-dynamic-form',
  standalone: true,
  imports: [,
    FormErrorComponent
  ],

и в моем шаблоне:

<app-form-error></app-form-error>

Я всегда получаю эту ошибку:

[ОШИБКА] Преобразование декораторов JavaScript в настроенную цель среда ("chrome123.0", "edge122.0", "firefox115.0", "ios16.0", «safari16.0» + 7 переопределений) пока не поддерживается. node_modules/myLib/projects/form-error/src/lib/form-error.comComponent.ts:3:0: 3 │ @Компонент({

Когда я делаю то же самое со службой, она работает отлично, но не с автономным компонентом.

Вот ошибка в Stackblitz

Вы уже пытались обновить цель в своей библиотеке?

Thomas Renger 19.05.2024 10:56

Оно уже есть в ES2022 — то же самое, что и приложение, которое я использую. Но я получаю ту же ошибку для «esnext».

Stef 19.05.2024 14:16

У вас есть компонент в части объявления модуля и вы установили его как автономный. Вы уверены, что это работает?

Thomas Renger 19.05.2024 15:41

Точно нет. Но я думал, что именно так можно экспортировать автономный компонент. Я делаю то же самое со службой, и она работает, поэтому я решил попробовать, поскольку хочу избежать заключения ее в NgModule.

Stef 19.05.2024 16:30

Вы можете импортировать автономный компонент в модуль и экспортировать его из модуля (если вы его импортируете), но нет необходимости экспортировать компонент из библиотеки. Использование модуля для отдельного компонента предназначено только для объединения, чтобы дать разработчику возможность импортировать модуль вместо каждого отдельного компонента пакета. Но языковая служба/компиляция должна выдать вам ошибку, если вы настраиваете объявление для автономного компонента.

Thomas Renger 19.05.2024 21:08
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
5
264
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

К сожалению, я не могу предложить решение этой проблемы, но могу поделиться обходным путем.

Похоже, проблема связана с тем, что esbuild неправильно настроен в многопроектном репозитории. Я не уверен, является ли это проблемой Angular или проблемой esbuild.

Чтобы обойти эту проблему, вам придется использовать старый конструктор веб-пакетов в angular.json.

Это должно быть похоже на вашу текущую конфигурацию:

{
  "my-library": {
    "projectType": "application",
    "architect": {
      "build": {
        "builder": "@angular-devkit/build-angular:application",
        "options": {
          "browser": "projects/my-library/src/main.ts",
          [...]
        },
        "configurations": [...]
      },
      "serve": [...]
    }
  }
}

Вам нужно изменить конструктор с «приложения» (или «браузера-esbuild») на «браузер»:

"builder": "@angular-devkit/build-angular:browser",

и переименуйте поле «браузер» в «основное»:

"main": "projects/my-library/src/main.ts",

Теперь вы сможете создать или обслуживать приложение.

Другие вопросы по теме