You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ng-packager打包Angular组件后SCSS字体资源找不到的问题

解决ng-packagr打包Angular组件包时ionicons字体找不到的问题

我之前也碰到过类似的情况,这个问题本质上是ng-packagr打包时资源路径处理的问题——默认情况下,它不会自动把node_modules里的字体文件打包进你的组件包,导致主项目安装后,SCSS里的字体引用路径会被解析为主项目的根目录,而非组件包的资源目录,所以才会出现找不到字体的报错。

下面是具体的解决步骤:

1. 重写ionicons的字体路径变量

在你的组件SCSS文件中,先覆盖ionicons的字体路径变量,再引入ionicons的SCSS文件。这样可以让组件的样式正确指向后续打包到组件包内的字体文件:

// 重写ionicons的字体路径,指向组件包内的assets/fonts目录
$ionicons-font-path: './assets/fonts/ionicons' !default;
// 引入ionicons的样式
@import '~ionicons/scss/ionicons.scss';

2. 配置ng-package.json打包字体资源

修改组件包根目录下的ng-package.json,添加assets配置项,把ionicons的字体文件复制到组件包的dist目录中:

{
  "$schema": "./node_modules/ng-packagr/ng-package.schema.json",
  "dest": "./dist/jtp-alert",
  "lib": {
    "entryFile": "src/public-api.ts"
  },
  "assets": [
    // 将ionicons的字体文件打包到组件包的assets/fonts目录
    { 
      "glob": "**/*.+(ttf|woff|woff2)", 
      "input": "./node_modules/ionicons/dist/fonts", 
      "output": "./assets/fonts" 
    }
  ]
}

3. 重新打包并发布组件包

执行打包命令重新构建组件:

ng build jtp-alert

然后重新发布到npm:

cd dist/jtp-alert
npm publish

4. 主项目更新依赖并测试

在主项目中更新你的组件包依赖:

npm update jtp-alert

此时主项目加载组件样式时,会正确从jtp-alert组件包的assets/fonts目录加载字体文件,不会再出现路径错误。

如果主项目自己也引入了ionicons,为了避免冲突,你可以在主项目的styles.scss中同样重写$ionicons-font-path变量,统一指向组件包的字体路径或者主项目本地的字体路径。

内容的提问来源于stack exchange,提问作者Jimmy Porto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:49:22