【问题标题】:Using FontAwesome in jekyll project with grunt and bower在带有 grunt 和 bower 的 jekyll 项目中使用 FontAwesome
【发布时间】:2014-07-01 08:00:16
【问题描述】:

我正在尝试在我的 jekyll 项目中使用 FontAwesome。我使用 yeoman (generator-jekyllrb) 生成了它,我使用的是 Grunt 和 Bower。我使用 bower: bower install fontawesome 安装了字体,它已经安装在我的 app/_bower_components 目录中。我的问题是如何访问它?这是app/_bower_components/fontawesome 目录中的内容:

fontawesome
├── css
│   ├── font-awesome.css
│   └── font-awesome.min.css
├── fonts
│   ├── FontAwesome.otf
│   ├── fontawesome-webfont.eot
│   ├── fontawesome-webfont.svg
│   ├── fontawesome-webfont.ttf
│   └── fontawesome-webfont.woff
├── less
│   └── ...
└── scss
    └── ...

app/_bower_components/fontawesome/css/font-awesome.css 我有这个:

@font-face {
  font-family: 'FontAwesome';
  src: url('../fonts/fontawesome-webfont.eot?v=4.1.0');
  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg');
  font-weight: normal;
  font-style: normal;
}

在我的 html 文件中,我有这个:

<!-- build:css({app,.tmp}) /css/main.css -->
<!-- Syntax highlighting CSS -->
<link rel="stylesheet" href="/_bower_components/fontawesome/css/font-awesome.min.css">
<link rel="stylesheet" href="/css/syntax.css">
<link rel="stylesheet" href="/css/main.css">
<!-- endbuild -->

当我在本地尝试时,一切正常,但是,当我将它构建到静态站点时,我得到 404 not found 因为没有目录 fonts(grunt 将所有 .css 文件缩小并合并为一个,并且没有t 用字体本身制作fonts 目录):

dist
├── 404.html
├── css
│   └── main.0df9.css
├── img
│   └── okay.d42b.png
├── index.html
├── jekyll
│   └── update
│       └── 2014
│           └── 06
│               └── 16
│                   ├── test-first-post.html
│                   ├── welcome-to-jekyll.html
│                   └── yo-jekyllrb.html
├── js
│   └── scripts.472f.js
└── search.json

如果我将字体文件复制到我的app/fonts(我认为这不是最好的方法),它也不起作用,因为 grunt 更改了它们的名称。那么,我该怎么办?

如果您需要,这是我的Gruntfile

我还尝试将 fontawesome 目录添加到我的 Gruntfile(第 270 行):

dist: {
  files: [{
    expand: true,
    dot: true,
    cwd: '<%= yeoman.app %>',
    src: [
      // Jekyll processes and moves HTML and text files.
      // Usemin moves CSS and javascript inside of Usemin blocks.
      // Copy moves asset files and directories.
      'img/**/*',
      'fonts/**/*',
      // Like Jekyll, exclude files & folders prefixed with an underscore.
      '!**/_*{,/**}',
      // Explicitly add any files your site needs for distribution here.
      // '_bower_components/jquery/jquery.js',
      //'favicon.ico',
      //'apple-touch*.png'
    ],
    dest: '<%= yeoman.dist %>'
  }]
},

它工作得非常好,它会生成一个可以工作的静态站点,但是当我部署它时(我正在使用 GitHub Pages)它只是在 _bower_components 目录中找不到任何东西。

【问题讨论】:

    标签: gruntjs jekyll bower


    【解决方案1】:

    您需要从/app/css/main.css 创建一个对fontawesome css 的导入,以便它将包含在您编译的/dist/css/main.css 中,因为/dist/ 中不存在_bower_components 文件夹。

    您还需要手动将字体文件本身复制到您的 /app/fonts 目录中,或者设置 Grunt 来执行此操作。

    【讨论】:

      【解决方案2】:

      在项目中获取 Font Awesome 的绝对最简单的方法是简单地使用此处详述的 CDN 选项:

      Get Started with Font Awesome

      您只需将&lt;link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.0/css/font-awesome.min.css"&gt; 放入_includes/head.html 中,&lt;i class="fa fa-camera-retro"&gt;&lt;/i&gt; 之类的东西就会神奇地随处可见。

      如果您需要/更喜欢在本地提供所有服务,请继续阅读...

      注意dist/ 目录中没有bower_components/ 文件夹。这意味着 1) grunt 不会将任何 bower 资产复制到最终构建 (grunt build) 和 2) html 文件中对 /_bower_components/fontawesome/css/font-awesome.min.css&lt;link&gt; 引用将被破坏。

      第 1 步(可选)

      在你的主 sass 文件中包含 app/_bower_components/fontawesome/css/font-awesome.css 的内容,如下所示:

      // .scss (not .sass) syntax
      @import "path/to/font-awesome.css";
      

      现在,当您运行grunt build 时,font-awesome.css 的内容将添加到dist 的最终样式表中。

      这意味着你可以从你的 html 中删除这一行:

      <link rel="stylesheet" href="/_bower_components/fontawesome/css/font-awesome.min.css">
      

      (不要担心丢失缩小,因为这仍然会发生在grunt build。)

      现在您已经在 sass 文件中方便地控制了所有样式,并在此过程中保存了一个 http 请求。 (拳头)

      第 2 步

      你有用于 font-awesome 的 CSS,但现在这些链接将在最终构建中被破坏:

      src: url('../fonts/fontawesome-webfont.eot?v=4.1.0');
      src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg');
      

      这是因为 grunt 不知道 /_bower_components/fontawesome/fonts/ 中的文件,除非你告诉它。

      请注意您的Gruntfile.js

      copy: {
            dist: {
              files: [{
                expand: true,
                dot: true,
                cwd: '<%= yeoman.app %>',
                src: [
                  // Jekyll processes and moves HTML and text files.
                  // Usemin moves CSS and javascript inside of Usemin blocks.
                  // Copy moves asset files and directories.
                  'img/**/*',
                  'fonts/**/*',
                  // Like Jekyll, exclude files & folders prefixed with an underscore.
                  '!**/_*{,/**}',
                  // Explicitly add any files your site needs for distribution here.
                  // '_bower_components/jquery/jquery.js',
                  //'favicon.ico',
                  //'apple-touch*.png'
                ],
                dest: '<%= yeoman.dist %>'
              }]
            },
      

      copy: 任务专为您在 dist 中所需的任何资产而设计,这些资产尚未由其他任务(例如 compassusemin)处理。

      现在我们有几个选择

      选项 1

      取消注释上面的'_bower_components/jquery/jquery.js' 并将其更改为'_bower_components/fontawesome/fonts/**/*'。现在fontawesome/fonts 的内容将包含在最终的dist 中。

      接下来,更新/_bower_components/fontawesome/css/font-awesome.css 以反映新的文件路径:

      @font-face {
        font-family: 'FontAwesome';
        src: url('../_bower_components/fontawesome/fonts/fontawesome-webfont.eot?v=4.1.0');
        src: url('../_bower_components/fontawesome/fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'), url('../_bower_components/fontawesome/fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'), url('../_bower_components/fontawesome/fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'), url('../_bower_components/fontawesome/fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg');
        font-weight: normal;
        font-style: normal;
      }
      

      警告:通过 bower 更新 font-awesome 将覆盖这些更改,您必须每次修复它。恼人的。

      那么我们能做些什么呢?

      选项 2(我最喜欢的)

      让我们将字体从/_bower_components/fontawesome/fonts/ 获取到&lt;%= yeoman.app %&gt;/fonts/ 之前 fonts/**/* 被grunt 复制到dist。幸运的是,files: 任务已经是一个array,所以我们可以在现有的上面再添加一个object

      这是Gruntfile.js的更新部分:

      copy: {
                dist: {
                  files: [{
                    expand: true,
                    dot: true,
                    cwd: '<%= yeoman.app %>',
                    src: [
                      // Jekyll processes and moves HTML and text files.
                      // Usemin moves CSS and javascript inside of Usemin blocks.
                      // Copy moves asset files and directories.
                      'img/**/*',
                      'fonts/**/*',
                      // Like Jekyll, exclude files & folders prefixed with an underscore.
                      '!**/_*{,/**}',
                      // Explicitly add any files your site needs for distribution here.
                      // '_bower_components/jquery/jquery.js',
                      //'favicon.ico',
                      //'apple-touch*.png'
                    ],
                    dest: '<%= yeoman.dist %>'
                  },{
                    // Copy font awesome fonts
                    expand: true,
                    cwd: '<%= yeoman.app %>',
                    src: [
                      '_bower_components/font-awesome/fonts/**/*',
                    ],
                    dest: '<%= yeoman.dist %>/fonts/'
                  }]
                },
      

      还要注意filerev: 任务重命名dist 中的某些资产,以便在部署时轻松清除缓存。如果在这些步骤之后构建的css中的字体路径与dist/fonts中的路径不匹配,请尝试在Gruntfile.js中注释掉filerev:任务中的相关行:

      filerev: {
            options: {
              length: 4
            },
            dist: {
              files: [{
                src: [
                  '<%= yeoman.dist %>/js/**/*.js',
                  '<%= yeoman.dist %>/css/**/*.css',
                  '<%= yeoman.dist %>/img/**/*.{gif,jpg,jpeg,png,svg,webp}',
                  // '<%= yeoman.dist %>/fonts/**/*.{eot*,otf,svg,ttf,woff}'
                ]
              }]
            }
          },
      

      【讨论】:

        猜你喜欢
        • 2014-11-03
        • 2023-04-10
        • 2014-02-04
        • 1970-01-01
        • 1970-01-01
        • 2015-08-08
        • 2014-02-14
        • 1970-01-01
        • 2016-01-01
        相关资源
        最近更新 更多