2.0.7 • Published 6 years ago

fingerprint-brunch v2.0.7

Weekly downloads
562
License
MIT
Repository
github
Last release
6 years ago

fingerprint-brunch Greenkeeper badge Build Status Coverage Status Join the chat at https://gitter.im/dlepaux/fingerprint-brunch

A Brunch plugin which renames assets with a SHA (generated from file content) to fingerprint it.

You're allowed to fingerprint specific files, assets folders, generated files and css linked assets.

Installation

npm install fingerprint-brunch --save-dev

Usage

You can find here a working setup with fingerprint-brunch

Configuration

Optional You can override fingerprint-brunch's default options by updating your brunch-config.coffee with your custom parameters.

  • manifest: (String) Defaults to ./assets.json
    • Mapping fingerprinted files
  • srcBasePath: (String) Defaults to example/
    • The base Path you want to remove from the key string in the mapping file
  • destBasePath: (String) Defaults to out/
    • The base Path you want to remove from the value string in the mapping file
  • hashLength: (Integer) Defaults to 8
    • How many digits of the SHA1
  • autoClearOldFiles: (Boolean) Defaults to false
    • Remove old fingerprinted files (usefull in development env)
  • targets: (String|Array) Defaults to *
  • environments: (Array) Defaults to ['production']
    • Environment to fingerprint files
  • alwaysRun: (Boolean) Defaults to false
    • Force fingerprint-brunch to run in all environments when true.
  • autoReplaceAndHash: (Boolean) Defaults to false
    • Find assets in your jointTo files. It will be finded with url('path/to/assets.jpg') in your css (for now)
  • assetsPrefix: (Boolean|String) Defaults to false
    • Prefix to prepend to replaced assets path.
  • publicRootPath: (string) Defaults to /public
    • For support multiple themes, you can set the public root path, exemple :
    • My config.paths.public is ../../public/theme/theme-1/ in css your fonts, images will be linked like that : /theme/theme-1/img/troll.png.
    • You must set publicRootPath with ../../public to conserve correct link in your css..
  • manifestGenerationForce: (Boolean) Defaults to false
    • Force the generation of the manifest, event if there are no fingerprinted files
  • foldersToFingerprint: (Boolean|String|Array) Defaults to false
    • Asset to fingerprint (in brunch config public), all files will be fingerprinted and added to the manifest
    • Usage : '/img' or ['/img', '/svg']
  • assetsToFingerprint: (Boolean|Array) Defaults to false
    • Specific asset to fingerprint (in public)
    • Usage : ['/img/troll.png'] or ['/img/troll.png', '/svg/logo.svg']
  • assetsPatterns: (RegExp Object) Defaults to new RegExp(/url\([\'\"]?[a-zA-Z0-9\-\/_.:]+\.(woff|woff2|eot|ttf|otf|jpg|jpeg|png|bmp|gif|svg)\??\#?[a-zA-Z0-9\-\/_]*[\'\"]?\)/g)
    • Regex to match assets in css with url() attribute
  • paramettersPattern: (Regex) Defaults to /(\?|\&|\#)([^=]?)([^&]*)/gm
    • Match hash and parameters in an URL

Example

exports.config =
  # ...
  plugins:
    fingerprint:
      manifest: './assets.json'
      srcBasePath: './exemple/'
      destBasePath: './out/'
      hashLength: 8
      autoClearOldFiles: false
      targets: '*'
      environments: ['production']
      alwaysRun: false
      autoReplaceAndHash: false
      publicRootPath: './public'
      manifestGenerationForce: false
      foldersToFingerprint: false
      assetsToFingerprint: false

The Manifest

{
  "css/master.css": "css/master-364b42a1.css",
  "js/master.js": "js/master-cb60c02b.js",
  "img/troll.png": "img/troll-5f2d5cbe.png",
  "fonts/font.eot": "fonts/font-45d860a3.eot",
  "fonts/font.woff": "fonts/font-6ced13b9.woff",
  "fonts/font.ttf": "fonts/font-82c653e7.ttf",
  "fonts/font.svg": "fonts/font-52343d4f.svg"
}
Fingerprint All

To get this kind of result in your manifest you need to :

  • Set autoReplaceAndHash to true
  • Or set foldersToFingerprint pointing to one folder ./img, or many ['./img', './svg']
  • Or set assetsToFingerprint pointing to files ['./img/troll.png']
Cleaning Manifest

Use srcBasePath and destBasePath to remove some part of path files in the manifest.

Options

assetsPrefix

Sometimes you may want to add a prefix to assets when replacing their path in your compiled css/js.

Say you have a CSS file containing:

.logo {
  background-image: url('logo.svg');
}

once replaced, the content would look like:

.logo {
  background-image: url('logo-f98d59ab3.svg');
}

if you were to set assetsPrefix: '/custom/' the result would be:

.logo {
  background-image: url('/custom/logo-f98d59ab3.svg');
}

Note: This could also be leveraged to prepend a CDN url for instance.

Testing / Issues

Run npm i && npm test

Contributing

Pull requests are welcome. If you add functionality, then please add unit tests to cover it.

2.0.9-alpha.0

4 years ago

2.0.7

6 years ago

2.0.6

6 years ago

2.0.5

7 years ago

2.0.3

7 years ago

2.0.2

8 years ago

2.0.1

8 years ago

2.0.0

8 years ago

1.2.8

9 years ago

1.2.7

9 years ago

1.2.6

9 years ago

1.2.5

9 years ago

1.2.4

9 years ago

1.2.3

9 years ago

1.2.2

9 years ago

1.2.1

10 years ago

1.2.0

10 years ago

1.1.3

10 years ago

1.1.2

10 years ago

1.1.1

10 years ago

1.1.0

10 years ago

1.0.11

10 years ago

1.0.10

10 years ago

1.0.9

10 years ago

1.0.8

10 years ago

1.0.7

10 years ago

1.0.6

10 years ago

1.0.5

10 years ago

1.0.4

10 years ago

1.0.3

10 years ago

1.0.2

10 years ago