Dynamically load assets into your views, emails, etc. from your
rev-manifest.json
manifest revision file (e.g.<script src="{{ manifest('foo.js'); }}"></script>
would return<script src="/foo-0775041dd4.js"></script>
when rendered).
npm:
npm install manifest-rev
yarn:
yarn add manifest-rev
const path = require('path');
const Koa = require('koa');
const manifestRev = require('manifest-rev');
const app = new Koa();
app.use((ctx, next) => {
ctx.state.manifest = manifestRev({
manifest: path.join(__dirname, 'build', 'rev-manifest.json'),
prepend: '/'
});
return next();
});
// ...
-
Call the
manifest(str, ?prop)
helper function in your views when you need to include assets (requires a templating engine).pug:
html head title Foo body h1 Foo script(src=manifest('foo.js', 'path'))
<html> <head> <title>Foo</title> </head> <body> <h1>Foo</h1> <script src="<%= manifest('foo.js', 'path'); %>" integrity="<%= manifest('foo.js', 'integrity') %>"></script> </body> </html>
nunjucks (via koa-nunjucks-promise):
<html> <head> <title>Foo</title> </head> <body> <h1>Foo</h1> <script src="{{ manifest('foo.js'); }}" integrity="{{ manifest('foo.js', 'integrity'); }}"></script> </body> </html>
-
manifestRev(options)
- accepts a requiredoptions
argument for setup. Returns middleware for use inapp.use
statement (which in turn binds toctx.state
a helper function calledmanifest
). Here are the properties accepts in theoptions
argument.manifest
(required) - path to a validrev-manifest.json
file (e.g. as built by gulp-rev or gulp-rev-all)prepend
(optional) - string to prepend before file paths rendered after lookup (e.g. if you type{{ manifest('foo.js'); }}
in your view, and you have passedprepend: '/dist/'
in your setup, then your tag would render as<script src="/dist/foo-0775041dd4.js"></script>
(defaults to/
)
-
manifest(str)
- the helper function returned whenmanifestRev
is invoked in your app. Returns the string found from a lookup in yourrev-manifest.json
file for thestr
argument passed (e.g. if you type{{ manifest('foo.js'); }}
in your view, then it returns for the value of thefoo.js
property as defined in yourmanifest
file, such asfoo-0775041dd4.js
). If the found is not found, then the inputstr
argument is returned.
manifest(str)
is nowmanifest(str, prop)
which now accepts a following property within yourrev-manifest.json
file.prop
is optional and defaults to the path of the rev'd file. For example if you type{{ manifest('foo.js', 'integrity'); }}
in your view, then it returns for the value of thefoo.js
fileintegrity
property as defined in yourmanifest
file, such assha256-YEWYfCFP9yc5DAF8K5AtLEyFuKZ1MNw+xQPm8g70LYY=
). If the found is not found, then the inputstr
argument is returned.
Name | Website |
---|---|
Nick Baugh | http://niftylettuce.com/ |