将自定义字体从node_modules转换为angular-cli

Riv*_*dan 5 css fonts node-modules angular-cli angular

我看过一些stackoverflow帖子和github问题,但是找不到对我有用的东西。

我有一种自定义字体,用于通过npm安装的图标。这些是我的文件夹a-icons中的文件node_modules

a-icon.css
a-icon.eot,
a-icon.ttf,
a-icon.woff,
a-icon.svg
Run Code Online (Sandbox Code Playgroud)

在我的主要样式表中,我添加了:

@import '~a-icons/a-icon';
@font-face {
  font-family: 'a-icon';
  src: url('../../../node_modules/a-icons/a-icon.eot');
  src:
    url('../../../node_modules/a-icons/a-icon.ttf') format('truetype'),
    url('../../../node_modules/a-icons/a-icon.woff') format('woff'),
    url('../../../node_modules/a-icons/a-icon.svg') format('svg');
}
Run Code Online (Sandbox Code Playgroud)

@import '~a-icons/a-icon' 具体是给我一个错误,说它找不到.eot,.ttf,.woff,.svg

这是错误之一:

ERROR in ./node_modules/css-loader?{"sourceMap":false,"importLoaders":1}!./node_modules/postcss-loader/lib?{"ident":"postcss","sourceMap":false}!./node_modules/sass-loader/lib/loader.js?{"sourceMap":false,"precision":8,"includePaths":[]}!./src/assets/stylesheets/global-styles.scss
Module not found: Error: Can't resolve './a-icon.eot' in '/Users/rmadan/a-one/a-platform/src/assets/stylesheets'
resolve './a-icon.eot' in '/Users/rmadan/a-one/a-platform/src/assets/stylesheets'
  using description file: /Users/rmadan/a-one/a-platform/package.json (relative path: ./src/assets/stylesheets)
    Field 'browser' doesn't contain a valid alias configuration
  after using description file: /Users/rmadan/a-one/a-platform/package.json (relative path: ./src/assets/stylesheets)
    using description file: /Users/rmadan/a-one/a-platform/package.json (relative path: ./src/assets/stylesheets/a-icon.eot)
      no extension
        Field 'browser' doesn't contain a valid alias configuration
        /Users/rmadan/a-one/a-platform/src/assets/stylesheets/a-icon.eot doesn't exist
      .ts
        Field 'browser' doesn't contain a valid alias configuration
        /Users/rmadan/a-one/a-platform/src/assets/stylesheets/a-icon.eot.ts doesn't exist
      .js
        Field 'browser' doesn't contain a valid alias configuration
        /Users/rmadan/a-one/a-platform/src/assets/stylesheets/a-icon.eot.js doesn't exist
      as directory
        /Users/rmadan/a-one/a-platform/src/assets/stylesheets/a-icon.eot doesn't exist
[/Users/rmadan/a-one/a-platform/src/assets/stylesheets/a-icon.eot]
[/Users/rmadan/a-one/a-platform/src/assets/stylesheets/a-icon.eot.ts]
[/Users/rmadan/a-one/a-platform/src/assets/stylesheets/a-icon.eot.js]
[/Users/rmadan/a-one/a-platform/src/assets/stylesheets/a-icon.eot]
 @ ./node_modules/css-loader?{"sourceMap":false,"importLoaders":1}!./node_modules/postcss-loader/lib?{"ident":"postcss","sourceMap":false}!./node_modules/sass-loader/lib/loader.js?{"sourceMap":false,"precision":8,"includePaths":[]}!./src/assets/stylesheets/global-styles.scss 6:76081-76109
 @ ./src/assets/stylesheets/global-styles.scss
 @ multi ./src/assets/stylesheets/global-styles.scss ./node_modules/normalize.css/normalize.css
Run Code Online (Sandbox Code Playgroud)

我正在使用scss,但是字体在香草CSS中。

我也尝试过@import '../../../node_modules/a-icons/a-icon.css';将图标显示为正方形,这是因为无法识别字体系列。所以我添加了@ font-face,但是它什么也没做。

我还尝试过更改angular-cli.json以将其包含在资产和样式中:

"assets": [
    "assets",
    "assets/languages",
    "assets/stylesheets",
    "favicon.ico",
    "environments/environment.values.js",
    {
      "glob": "a-icon.*",
      "input": "../node_modules/a-icons",
      "output": "./assets/a-icons"
    }
"styles": [
    "assets/stylesheets/global-styles.scss",
    "../node_modules/normalize.css/normalize.css",
    "../node_modules/a-icons/a-icon.css"
    ]
Run Code Online (Sandbox Code Playgroud)

这什么也没做。

mth*_*led 5

首先,我建议你在你的节点模块中创建一个单独的 css 文件“fonts.css”,在你的应用程序中包含一个 css 文件会很简单,而不是重新定义字体并引用 N 个文件(woff2,eot ... ect),例如:您的 fonts.css:

@font-face {
  font-family: 'a-icon';
  src: url('a-icon.eot');
  src:
    url('a-icon.ttf') format('truetype'),
    url('a-icon.woff') format('woff'),
    url('a-icon.svg') format('svg');
}
Run Code Online (Sandbox Code Playgroud)

其次,在 angular 应用程序的 style.css 中包含文件“fonts.css”,如下所示:

@import "~a-icons/fonts.css";
Run Code Online (Sandbox Code Playgroud)

我有一个类似的解决方案,效果很好,我的节点模块包含一个带有字体的主题。