npm.io
9.1.0 • Published 3 weeks ago

postcss-svgo

Licence
MIT
Version
9.1.0
Deps
3
Size
21 kB
Vulns
0
Weekly
0
Stars
5.0K

postcss-svgo

Optimise inline SVG with PostCSS.

Install

With npm do:

npm install postcss-svgo --save

Example

Input
h1 {
    background: url('data:image/svg+xml;charset=utf-8,<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"><circle cx="50" cy="50" r="40" fill="yellow" /></svg>');
}

h2 {
    background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDAiIGZpbGw9InllbGxvdyIgLz48IS0tdGVzdCBjb21tZW50LS0+PC9zdmc+');
}
Output
h1 {
    background: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve"><circle cx="50" cy="50" r="40" fill="%23ff0"/></svg>');
}

h2 {
    background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjQwIiBmaWxsPSIjZmYwIi8+PC9zdmc+');
}

API

svgo([options])
options
encode

Type: boolean Default: undefined

If true, it will encode URL-unsafe characters such as <, > and &; false will decode these characters, and undefined will neither encode nor decode the original input. Note that regardless of this setting, # will always be URL-encoded.

configFile

Type: string | boolean Default: undefined

Path to a svgo configuration file, relative to the cwd option, or true to find one the same way the SVGO CLI does: in cwd and then each parent directory. The datauri option in the file is ignored, because it only makes sense for the SVGO command line.

The file is read the first time the plugin runs and reused by later runs of the same plugin instance. Reading a file is asynchronous, so when configFile is set, use the async PostCSS API (process(css).then() or await). The synchronous API throws.

Inline options override the file's options key by key. Passing js2svg inline replaces the file's whole js2svg object, and an inline option set to undefined does not replace the file's setting.

cwd

Type: string Default: process.cwd()

The directory that a relative configFile path is resolved against, and where configFile: true starts its search. It does not depend on the location of the CSS file.

plugins

Optionally, you can customise the output by specifying the plugins option. You will need to provide the config in comma separated objects, like the example below. Note that you can either disable the plugin by setting it to false, or pass different options to change the default behaviour.

const postcss = require('postcss');
const svgo = require('postcss-svgo');

const opts = {
    plugins: [{
        name: 'preset-default',
        params: {
            overrides: {
                removeComments: false,
                cleanupNumericValues: {
                    floatPrecision: 2
                }
            }
        }
    }]
};


postcss([ svgo(opts) ]).process(css).then((result) => {
    console.log(result.css)
});

You can view the full list of plugins here.

Security

This package optimises SVG data URIs; it is not an SVG sanitizer. Do not rely on it to remove active or unsafe SVG content.

Sanitize user-controlled SVG with a purpose-built sanitizer before optimisation.

Usage

See the PostCSS documentation for examples for your environment.

Contributors

See CONTRIBUTORS.md.

License

MIT Ben Briggs

Keywords