gpt4 book ai didi

组件库中的 Angular Font Awesome - FontAwesome : Could not find icon with iconName=times and prefix=fas

转载 作者:太空狗 更新时间:2023-10-29 17:27:20 24 4
gpt4 key购买 nike

我有一个使用 FontAwesome 图标的 Angular 7 组件库。

首先是ng版本的输出:

Package                            Version
------------------------------------------------------------
@angular-devkit/architect 0.10.7
@angular-devkit/build-angular 0.10.7
@angular-devkit/build-ng-packagr 0.10.7
@angular-devkit/build-optimizer 0.10.7
@angular-devkit/build-webpack 0.10.7
@angular-devkit/core 7.0.7
@angular-devkit/schematics 7.0.7
@angular/cdk 7.1.1
@angular/cli 7.0.7
@angular/compiler-cli 7.0.4
@angular/language-service 7.0.4
@angular/material 7.1.1
@ngtools/json-schema 1.1.0
@ngtools/webpack 7.0.7
@schematics/angular 7.0.7
@schematics/update 0.10.7
ng-packagr 4.4.5
rxjs 6.3.3
typescript 3.1.3
webpack 4.19.1

以及package.json中的相关花絮:

"@fortawesome/angular-fontawesome": "^0.3.0",
"@fortawesome/fontawesome-svg-core": "^1.2.8",
"@fortawesome/free-regular-svg-icons": "^5.5.0",
"@fortawesome/free-solid-svg-icons": "^5.5.0",

这是我的模块定义:

import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
import { library } from '@fortawesome/fontawesome-svg-core';

import { faAngleDown } from '@fortawesome/free-solid-svg-icons/faAngleDown';
import { faBars } from '@fortawesome/free-solid-svg-icons/faBars';
import { faCalendarAlt } from '@fortawesome/free-solid-svg-icons/faCalendarAlt';
import { faCaretLeft } from '@fortawesome/free-solid-svg-icons/faCaretLeft';
import { faChevronDown } from '@fortawesome/free-solid-svg-icons/faChevronDown';
import { faSortUp } from '@fortawesome/free-solid-svg-icons/faSortUp';
import { faSortDown } from '@fortawesome/free-solid-svg-icons/faSortDown';
import { faChevronUp } from '@fortawesome/free-solid-svg-icons/faChevronUp';
import { faChevronLeft } from '@fortawesome/free-solid-svg-icons/faChevronLeft';
import { faTimes } from '@fortawesome/free-solid-svg-icons/faTimes';
import { faUser } from '@fortawesome/free-solid-svg-icons/faUser';
import { faSignOutAlt } from '@fortawesome/free-solid-svg-icons/faSignOutAlt';
import { faQuestionCircle } from '@fortawesome/free-solid-svg-icons/faQuestionCircle';
import { faGlobeAmericas } from '@fortawesome/free-solid-svg-icons/faGlobeAmericas';

<app imports>

library.add(
faAngleDown, faBars, faCalendarAlt, faCaretLeft, faChevronDown,
faChevronLeft, faChevronUp, faGlobeAmericas, faQuestionCircle,
faSignOutAlt, faSortDown, faSortUp, faTimes, faUser
);

@NgModule({
declarations: [
<app components>
],
exports: [
<app components>
],
imports: [
FontAwesomeModule,
<other app imports>
]
})
export class LibModule {
public static forRoot(): ModuleWithProviders {
return {
ngModule: LibModule,
providers: [
<some providers>
]
};
}
}

这是 public_api.ts:

export * from './lib/lib.module';
<component exports>

我可以用 ng build mylib --prod 构建这个模块就好了。但是,当我尝试在应用程序中使用它时,每当使用 --prod 标志来构建或提供服务时,我都会收到以下错误:

FontAwesome:找不到 iconName=times 和 prefix=fas 的图标

这是应用程序的 app.module.ts 文件:

import { faCalendarAlt } from '@fortawesome/free-solid-svg-icons';
import { library } from '@fortawesome/fontawesome-svg-core';
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
import { LibModule } from 'libmodule';

<app imports>

library.add(faCalendarAlt);

@NgModule({
bootstrap: [ AppComponent ],
declarations: [
AppComponent,
],
imports: [
FontAwesomeModule,
LibModule.forRoot(),
]
})
export class AppModule {
}

app.component.ts 使用 faCalendarIcon,并且还从 LibModule 中引入组件,而这些组件又使用中描述的图标lib 模块定义。

当使用 ng serve --prodng build --prod 然后不通过烘焙的 Angular 开发服务器为应用程序提供服务时,日历图标显示得很好。但是,库组件本身使用的每个图标都不会显示,我从控制台的标题中看到了每个图标的错误。

请注意,当我使用没有 prod 标志的 ng serve 时,这不会发生,所以它可能与 tree-shaking 有关?

如何在库中使用 FontAwesomeModule 并确保库的使用者也能看到图标?我宁愿不必让所有消费者都导入库使用的所有图标。

请注意,我对 FontAwesome 图标使用了深度导入,我也尝试过这样进行“浅层”导入:

import {
faAngleDown,
faBars,
faCalendarAlt,
faCaretLeft,
faChevronDown,
faChevronLeft,
faChevronUp,
faGlobeAmericas,
faQuestionCircle,
faSignOutAlt,
faSortDown,
faSortUp,
faTimes,
faUser
} from '@fortawesome/free-solid-svg-icons';

我还尝试让我的 lib 模块导出 FontAwesomeModule,而不是导出它。我试过导出每个图标,但这似乎不可能。

最佳答案

好的,我们内部解决了这个问题。

在库中,刚刚漂浮在库模块定义文件中的library.add(...) 语句需要移动到模块构造函数中。这解决了问题。

关于组件库中的 Angular Font Awesome - FontAwesome : Could not find icon with iconName=times and prefix=fas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53748353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com