构建角度库时包含资产

Aiv*_*nas 23 assets angular-cli angular angular-library ng-packagr

我正在构建一个包含自定义图标字体的库。但是,当我使用 构建我的库时ng build <library-name> --prod,资产文件夹不包含在构建中,这意味着使用生产构建时不会显示图标。

我尝试了多种解决方案,例如添加assets数组angular.json并将资产文件夹复制到创建的 dist 文件夹。

我使用的是 Angular 8,该库是使用 angular-cli 创建的。

我尝试以两种方式包含字体:@import url( '../assets/icon_font.css' );在样式文件之一中使用并../assets/icon_font.css在需要它的组件之一中添加到 styleUrls。(icon_font.css是包含图标字体的 css 文件)

这是我的库目录的布局:

- src
  - lib
    - assets
      - icon_font.css
      - font files
    - component that requires icons
      - style sheet that has @import icon_font.css
    - other components and classes
Run Code Online (Sandbox Code Playgroud)

我希望assets/目录中的 .ttf 和其他字体文件在导出的dist文件夹中可用。

Rap*_*let 42

如前所述,angular 库现在支持angular v9.x以来的资产
但是在他们的网站上没有很好地解释。为了让它工作,你必须:

  1. 在你的库项目的根目录添加一个 assets 文件夹
    在此处输入图片说明
  2. 添加"assets": ["./assets"],ng-package.json库的文件中
{
  "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
  "dest": "../../dist/icon",
  "assets": ["./assets"], // <-- Add it here
  "lib": {
    "entryFile": "src/public-api.ts"
  }
}
Run Code Online (Sandbox Code Playgroud)
  1. ng build custom-project --prod. 然后它出现在你的 dist 文件夹中
    在此处输入图片说明

然后你可以在这个文件夹中添加你想要的

附加提示:在您的项目中使用它

然后,如果您希望将其用于导入到的项目中,请执行以下操作:

angular.json 中的资产、js、样式

将这些文件添加到您的angular.json文件中

 {
   /*...*/
   "assets": [ // Import every assets
     {
       "glob": "**/*",
       "input": "./node_modules/custom-project/assets",
       "output": "/assets/"
     }
   ],
   "styles" : [ // Only custom css
     "node_modules/custom-project/assets/my-css-file.css"
   ],
   "scripts" : [
     "node_modules/custom-project/assets/my-js-file.js"
   ]
 }
Run Code Online (Sandbox Code Playgroud)

Js 作为 app.module 的一部分

即使我不确定它是否真的懒加载这些文件,您也可以直接将 js 添加到子文件中
例如,到您的home.module.ts文件中,导入

 import 'custom-project/assets/my-js-file.js'
Run Code Online (Sandbox Code Playgroud)

  • 该解决方案有效,但在使用 CLI 创建的 Angular 库中,资产文件夹位于 src 文件夹内,而不是在同一级别。我不明白在 Angular 中复制不符合默认文件夹结构的资源的解决方案有什么意义。当然这不是你的错,只是说这似乎是 Angular 或 ng-package 团队的一个糟糕的设计决定。 (2认同)

Ger*_*ros 13

就像您在回答中所说的那样,无法强制打包程序将资产与构建文件一起打包。

现在,ng-packagr发布了一个新版本,允许您将资产与构建文件一起包含在内:

您可以使用资产选项复制这些资产。

编辑ng-package.json库中的文件(或projects/<your-lib>/ng-package.json文件,如果您使用多项目工作区)以定义应包含的资产:

{
  "ngPackage": {
    "assets": [
      "CHANGELOG.md",
      "./styles/**/*.theme.scss"
    ],
    "lib": {
      ...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

更多信息在这里:https : //github.com/ng-packagr/ng-packagr/blob/master/docs/copy-assets.md

  • 如果这个答案提供了这些行的上下文,它会更有用。什么文件?文件在哪里? (8认同)