Code Monkey home page Code Monkey logo

grunt-google-fonts's Introduction

grunt-google-fonts

Download Google Fonts in Grunt jobs

Getting Started

This plugin requires Grunt >=0.4.5

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

yarn add -D grunt-google-fonts

or

npm install grunt-google-fonts --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('grunt-google-fonts');

The "googlefonts" task

Options

options.fontPath

Type: String Default value: ./

Specify directory to store fonts.

options.cssFile

Type: String Boolean Default value: false

Path to store the generated css file.

options.cssFileLegacy

Type: String Boolean Default value: false

Path to store the generated legacy (non woff2) css file.

options.httpPath

Type: String Boolean Default value: false

Override http path in css file. This helps if you are hosting fonts from the CDN domain (eg. value https://my-super-fast.cdn/fonts/ will set the font path as https://my-super-fast.cdn/fonts/open-sans-300.woff). On false this will fallback to fontPath.

options.formats

Type: Object Default value: { eot: false, ttf: false, woff: false, woff2: true, svg: false }

Set formats to download. Defaults to woff2 that covers all modern browsers. For more information about format support, see caniuse entries for EOT, TTF, WOFF, WOFF2 and SVG.

options.fonts

Type: Array Default value: []

Fonts to download. This is an array of objects with font specific config.

font.family

Type: String

Font name.

font.styles

Type: Array

Array of font styles. Eg. [300] or [300, 400, '400italic'].

font.subsets

Type: Array

Array of font subsets. Eg. ['latin', 'cyrillic']. This option is ommitted on woff2 fonts.

font.text

Type: String

Restrict font to specified letters to make it smaller.

Usage Examples

Basic Options

This example includes all the functionality needed for basic use.

grunt.initConfig({
  googlefonts: {
    build: {
      options: {
        fontPath: 'fonts/',
        cssFile: 'fonts/fonts.css',
        fonts: [
          {
            family: 'Open Sans',
            styles: [
              400, 700
            ]
          }
        ]
      }
    }
  }
});

Custom Options

If you need more browser and charset support, this example is for you.

grunt.initConfig({
  googlefonts: {
    build: {
      options: {
        fontPath: 'fonts/',
        cssFile: 'fonts/fonts.css',
        formats: {
          eot: true,
          woff: true,
          svg: true
        },
        fonts: [
          {
            family: 'Open Sans',
            subsets: [
              'latin',
              'cyrillic'
            ],
            styles: [
              300, 400, 700
            ]
          },
          {
            family: 'Droid Sans',
            styles: [
              400, 700
            ]
          },
          {
            family: 'Lato',
            text: 'My logo',
            styles: [
              400
            ]
          }
        ]
      }
    }
  }
});

grunt-google-fonts's People

Contributors

benningm avatar lolfactor avatar mika- avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

grunt-google-fonts's Issues

Include woff2 in cssFileLegacy-File

The woff2 declaration should be included in the legacy file so there will be no need to include both css-files to get the best support for all brwosers.

@font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 400; src: url('../fonts/open-sans-400-normal.eot'); src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/open-sans-400-normal.eot?#iefix') format('embedded-opentype'), url('../fonts/open-sans-400-normal.woff2') format('woff2'), url('../fonts/open-sans-400-normal.woff') format('woff'), url('../fonts/open-sans-400-normal.ttf') format('truetype'), url('../fonts/open-sans-400-normal.svg#OpenSans') format('svg'); }

Add option for font-display

Could you add an option to specify the font-display property? Google pagespeed insights warns if the property is missing. Google fonts itself allows to specify the font-display option by adding a parameter &display=swap and therefore it would be nice, if the font-display could also be specified in the grunt options.

If setting wrong font weight css file does not get built

If you accidental set wrong font-weight the fonts.css never gets built, and there is no indication of error. As Shown on Titillium Web font 330 suppose to be 300

module.exports = function(grunt){
    grunt.initConfig({
 googlefonts: {
        build: {
            options: {
                fontPath: 'abc/fonts',
                cssFile: 'abc/fonts/css/fonts.css',
                httpPath: 'test.com/wpcontent/themes/wpthemefg/assets/fonts',
                formats: {
                    eot: true,
                    svg: true,
                    ttf: true,
                    woff: true,
                    woff2: true
                },
                fonts: [                        
                    {
                        family: 'Roboto',
                        styles: [300,400,500,700]                 
                    },
                    {
                        family: 'Titillium Web',
                        styles: [330,400,600]
                    }
                ]
            }
        }            
    }
    });

    grunt.loadNpmTasks('grunt-google-fonts');
    grunt.registerTask('default',['googlefonts']);
}

[FEATURE] Subsetting based on textfiles

I want to subset all fonts on my page. But not with basic standard subsets but instead custom ones.

So it basically should remove ALL chars that are not needed on my pages.
I would like to pass something like this to the config:

options: {
	subsetFromText: ['public/*.html', 'public/**/*.html'],    // can be TXT, HTML, all type of Textfile and should just respect the Text in the HTML so most probably no "<" and ">" if not in the Text
	formats: ['woff2']
},

I just want to have the WOFF2 and I would like to remove ALL unused chars which are not getting used on my pages.

A similar function is available grunt-ziti but it is archived and not supported anymore.

Is such subset option against HTML possible?

Issue when download font

๐Ÿ‘

'use strict';

module.exports = function(grunt) {
    grunt.initConfig({
        googlefonts: {
            build: {
                options: {
                    fontPath: './dist/fonts/',
                    cssFile: './dist/styles/roboto.css',
                    fonts: [{
                        family: 'Open Sans',
                        styles: [
                          400, 700
                        ]
                    }]
                }
            }
        }
    });

    grunt.loadNpmTasks('grunt-google-fonts');

    grunt.registerTask('default', ['googlefonts']);
};
Running "googlefonts:build" (googlefonts) task
Fatal error: Failed to download css: connect ETIMEDOUT 64.233.190.95:80

Option to not separate legacy styles

Is it possible to generate one CSS file instead of separate WOFF2 and legacy stylesheets?

I'd stick to 0.4.0 but there's a bug in the generated output that indicates WOFF2 as format('woff') which causes issues in IE9-11 (and probably Edge 13).

Relative fontPath

Using a relative fontPath like '../fonts/' is not working and a empty fontPath will be used instead.
The css files in my project are minified into a single file, and the font path has to be set to a relative path in order to find the fonts folder. Also fonts wont get downloaded at all.

googlefonts: {
            build: {
                options: {
                    fontPath: '../fonts/',
                    cssFile: 'dist/css/fonts.css',
                    fonts: [
                        {
                            family: 'Open Sans',
                            styles: [
                                400, 700
                            ]
                        }
                    ]
                }
            }
        }

generates

@font-face {
	font-family: 'Open Sans';
	font-style: normal;
	font-weight: 400;
	src: local('Open Sans'), local('OpenSans'), url(/open-sans-400-normal.woff2) format('woff'), url(/open-sans-400-normal.woff) format('woff');
}
@font-face {
	font-family: 'Open Sans';
	font-style: normal;
	font-weight: 700;
	src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/open-sans-700-normal.woff2) format('woff'), url(/open-sans-700-normal.woff) format('woff');
}

[FEATURE] "name"

My config is:

googlefonts: {
	build: {
		options: {
			fontPath: 'resources/fonts/',
			formats: {ttf: true},
			fonts: [
				{
					family: 'Poppins',
					styles: ['400']
				}
			]
		}
	}
}

But when I download execute this Task the downlaoded file is "poppins-400-normal.woff2" I want to have a custom name for every file. The config could look like this:

googlefonts: {
	build: {
		options: {
			fontPath: 'resources/fonts/',
			formats: {ttf: true},
			fonts: [
				{
					family: 'Poppins',
					styles: ['400']
					name: 'myCustomName.ttf'
				}
			]
		}
	}
}

This would be great!
Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.