Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

postcss-url

postcss3mMIT10.1.3TypeScript support: definitely-typed

PostCSS plugin to rebase or inline on url().

css, postcss, postcss-plugin, url, rebase, inline, base64, assets

readme

postcss-url

Travis Build Status AppVeyor Build Status dependencies Status devDependencies Status

PostCSS plugin to rebase, inline or copy on url().

Installation

$ npm install postcss postcss-url

Basic example - rebase

// dependencies
const fs = require("fs")
const postcss = require("postcss")
const url = require("postcss-url")

// css to be processed
const css = fs.readFileSync("input.css", "utf8")

// process css
const output = postcss()
  .use(url({
    url: "rebase"
  }))
  .process(css, {
    from: "src/stylesheet/index.css",
    to: "dist/index.css"
  })

before:

.element {
    background: url('images/sprite.png');
}

after:

.element {
    /* rebasing path by new destination */
    background: url('../src/stylesheet/images/sprite.png');
}

Inline

// postcss-url options
const options = {
    url: 'inline'
};

postcss()
  .use(url(options))
  .process(css, {
    from: "src/stylesheet/index.css",
    to: "dist/index.css"
  })

before:

.element {
    background: url('/images/sprite.png');
    filter: url('/images/circle.svg');
}

after:

.element {
    /* inlined png as base64 */
    background: url('data:image/png;base64,R0lGODlhAQABAJH/AP///wAAAP///wAAACH/C0FET0JFOklSMS4');
    /* inlined svg as encodeURIComponent */
    filter: url('data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%2F%3E');
}

Copy

// postcss-url options
const options = {
    url: 'copy',
    // base path to search assets from
    basePath: path.resolve('node_modules/bootstrap'),
    // dir to copy assets
    assetsPath: 'img',
    // using hash names for assets (generates from asset content)
    useHash: true
};

postcss()
  .use(url(options))
  .process(css, {
    from: "src/stylesheet/index.css",
    to: "dist/index.css"
  })

before:

.element {
    background: url('/images/sprite.png');
}

after:

.element {
    /* copy 'sprite.png' from 'node_modules/bootstrap/images/' to 'dist/img/' */
    /* and rename it by hash function */
    background: url('img/a2ds3kfu.png');
}

Multiple options

process first matched option by default. multi: true in custom will processing with other options

const options = [
    { filter: '**/assets/copy/*.png', url: 'copy', assetsPath: 'img', useHash: true },
    { filter: '**/assets/inline/*.svg', url: 'inline' },
    { filter: '**/assets/**/*.gif', url: 'rebase' },
    // using custom function to build url
    { filter: 'cdn/**/*', url: (asset) => `https://cdn.url/${asset.url}` }
];

postcss().use(url(options))

Checkout tests for examples.

Options combinations

  • rebase - default
    • assetsPath - directory to copy assets (relative to to or absolute)
  • inline
    • basePath - path or array of paths to search assets (relative to from, or absolute)
    • encodeType - base64, encodeURI, encodeURIComponent
    • includeUriFragment - include the fragment identifer at the end of the URI
    • maxSize - file size in kbytes
    • fallback - copy, rebase or custom function for files > maxSize
    • ignoreFragmentWarning - do not warn when an SVG URL with a fragment is inlined
    • optimizeSvgEncode - reduce size of inlined svg (IE9+, Android 3+)
  • copy
    • basePath - path or array of paths to search assets (relative to from, or absolute)
    • assetsPath - directory to copy assets (relative to to or absolute)
    • useHash - use filehash(xxhash) for naming
    • hashOptions - options for hash function
  • custom {Function}
    • multi - processing with other options

Options list

url

rebase - (default)

Allow you to fix url() according to postcss to and/or from options (rebase to to first if available, otherwise from or process.cwd()).

inline

Allow you to inline assets using base64 encoding. Can use postcss from option to find ressources.

copy

Allow you to copy and rebase assets according to postcss to, assetsPath and from options (assetsPath is relative to the option to).

url: {Function}

Custom transform function. Takes following arguments:

  • asset
    • url - original url
    • pathname - url pathname (url without search or hash)
    • absolutePath - absolute path to asset
    • relativePath - current relative path to asset
    • search - search from url, ex. ?query=1 from ./image.png?query=1
    • hash - hash from url, ex. #spriteLink from ../asset.svg#spriteLink
  • dir
    • from - postcss option from
    • to - postcss option to
    • file - decl file path
  • options - postcss-url matched options
  • decl - related postcss declaration object
  • warn - wrapped function result.warn for current decl
  • result – postcss result object

And should return the transformed url. You can use this option to adjust urls for CDN.

maxSize

Specify the maximum file size to inline (in kbytes)

ignoreFragmentWarning

(default: false)

Do not warn when an SVG URL with a fragment is inlined. PostCSS-URL does not support partial inlining. The entire SVG file will be inlined. By default a warning will be issued when this occurs.

NOTE: Only files less than the maximum size will be inlined.

filter

A regular expression e.g. /\.svg$/, a minimatch string e.g. '**/*.svg' or a custom filter function to determine wether a file should be inlined.

fallback

The url fallback method to use if max size is exceeded or url contains a hash. Custom transform functions are supported.

includeUriFragment

(default: false)

Specifies whether the URL's fragment identifer value, if present, will be added to the inlined data URI.

basePath

Specify the base path or list of base paths where to search images from

assetsPath

(default: false)

If you specify an assetsPath, the assets files will be copied in that destination

useHash

(default: false)

If set to true the copy method is going to rename the path of the files by a hash name

hashOptions

method

(default: xxhash32)

Hash method xxhash32|xxhash64 or custom function (accept file buffer)

shrink

(default: 8)

Result hash shrink count

append

(default: false)

Prepend the original filename in resulting filename


Contributing

Work on a branch, install dev-dependencies, respect coding style & run tests before submitting a bug fix or a feature.

$ git clone https://github.com/postcss/postcss-url.git
$ git checkout -b patch-1
$ npm install
$ npm test

Changelog

License

changelog

10.1.3 - 2021-03-19

Fixed: update mime version

10.1.2 - 2021-03-19

Fixed: tilde operator for dependencies to allow for newer patch version

10.1.1 - 2020-11-26

Fixed: updated mime and xxhashjs versions Fixed: postcss peerDependency version 8.1.2 -> 8.0.0

10.1.0 - 2020-11-04

Fixed: Replaced mkdirp with make-dir (PR#152) Fixed: updated dev dependencies, resolved npm audit issues

10.0.0 - 2020-10-23

Added: support for PostCSS 8 (PR#148) Fixed: path resolution when to/from paths match (PR#136)

9.0.0 - 2019-04-17

Fixed: Async API Added: support for PostCSS 8

8.0.0 - 2018-08-09

Changed: updated postcss 6.0.1 > 7.0.2, postcss-import 10.0.0 > 12.0.0, and required nodejs version (PR#126) Changed: updated mime package

7.3.2 - 2018-04-03

Fixed: ignore urls which starts with ~ (PR#119)

7.3.1 - 2018-02-25

Fixed: ignore urls which starts with // (PR#117)

7.3.0 - 2017-10-26

Added: hash option - append (PR#114)

7.2.1 - 2017-10-19

Fixed: dependency security (#108) (#109)

7.2.0 - 2017-10-17

Added: assetsPath option for rebase

7.1.2 - 2017-08-11

Fixed: wrap url by quotes for inlined svg (#78)

7.1.1 - 2017-07-24

Fixed: force wrap url by quotes for optimizeSvgEncode (#105)

7.1.0 - 2017-07-19

Added: optimizeSvgEncode option for inlined svg (#103) Added: rebase as fallback in copy (#104)

7.0.0 - 2017-06-05

Added: PostCss 6 support

6.3.0 - 2017-06-04

Added: multi property for custom Added: option to include fragment identifiers on inline data URIs Added: support ignoring SVG fragment inlining warning

6.1.0 - 2017-05-13

Changed: filter functions access to asset object Added: support crypto hash function methods Added: support for postcss's dependency messaging

6.0.4 - 2017-04-06

Fixed: prepare asset without file path in decl (#94)

6.0.3 - 2017-04-04

Fixed: hash url error (#89)

6.0.2 - 2017-04-04

Fixed: match options before analyzing (pull-88)

6.0.1 - 2017-04-03

  • Fixed: bug with empty options (#87)

6.0.0 - 2017-04-02

  • Changed: es5 -> es6
  • Added: multiple options for postcss-url as array
  • Added: multiple basePath as array
  • Added: copy accept basePath param
  • Changed: hash function to xxhash
  • Changed: arguments in custom url callback
  • Changed: no processing callback in inline without maxSize
  • Changed: filter matches by asset path, relative to project (process.cwd)
  • Changed: copy can work without postcss to option, but required assetPath

5.1.2 - 2016-05-01

  • Fixed: node 6 compatibility (#68)

5.1.1 - 2016-02-03

  • Fixed: typo in an error message (#62)

5.1.0 - 2016-01-19

  • Added: filter option (#61)

5.0.2 - 2015-10-12

  • Fixed: now rebase url in old Internet Explorer filter progid:DXImageTransform.Microsoft.AlphaImageLoader() (#55)

5.0.1 - 2015-10-04

  • Fixed: windows compatibility (#52)

5.0.0 - 2015-09-07

  • Removed: compatibility with postcss v4.x (#45)
  • Added: compatibility with postcss v5.x (#76)

4.0.1 - 2015-08-06

  • Fixed: copy/rename of hash and query string for filenames (#40)

4.0.0 - 2015-06-18

  • Fixed: fallback callback is working again (#33)
  • Changed: Messages are now passed via postcss messages api (no more console.warn)
  • Added: callbacks might have now postcss result object as last param. Handy to send some messages.

3.3.0 - 2015-06-16

  • Added: postcss ^4.1.x dependency (#31)
  • Added: new options to url callback (#32)

3.2.0 - 2015-05-01

  • Added: New fallback option to use if max size is exceeded or url contains a hash (#30)

3.1.0 - 2015-05-01

  • Added: New copy value for url option (#29)

3.0.0 - 2015-03-02

  • Changed: upgraded to postcss v4.1.x

2.1.1 - 2015-03-31

  • Fixed: whitespace before and after url() value are now supported and preserved (#27)

2.1.0 - 2015-03-12

  • Added: related postcss declaration object has been added as a 2nd parameter to the url callback for custom processing

2.0.2 - 2015-01-31

  • Fixed: url that are just hashes are ignored completely (#25)

2.0.1 - 2015-01-31

  • Fixed: url with hashes are ignored for inline mode only (#23)

2.0.0 - 2015-01-26

  • Added: compatibility with postcss v4.x
  • Removed: compatibility with postcss v3.x

1.3.1 - 2015-01-26

  • Fixed: dependency issue related to "directory-encoder" (#22)

1.3.0 - 2015-01-26

  • Changed: SVGs are now in plain text (not base64 encoded) (3c04f7a, #18)
  • Fixed: URLs with hashes (e.g. SVG fragments) are now ignored (c3a9abc, #20)

1.2.3 - 2015-01-10

  • Use Node's native buffer.toString("base64"). The js-base64 library was producing incorrect base64 for certain files (#17)

1.2.2 - unpublished

1.2.1 - 2014-12-09

  • Data URIs are ignored correctly (#15)

1.2.0 - 2014-12-04

  • url now accept a function to allow custom transformation of the url string
  • All absolute url protocols are now ignored (not just /https?/).

1.1.3 - 2014-12-04

  • Fix absolute urls being mangled (#13)

1.1.2 - 2014-11-08

  • Fix MaxSize issue (#9)

1.1.1 - 2014-10-30

  • Fix bug which leads to not correct base64 code

1.1.0 - 2014-10-29

  • Add maxSize (size in kbytes) and basePath (base path for images to inline) options for inline mode.

1.0.2 - 2014-10-10

  • Fix non-working base64 encoding

1.0.1 - 2014-10-09

  • Fix paths for Windows (#3 via #4)

1.0.0 - 2014-08-24

First release