manifest-rev

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).
Table of Contents
Install
npm:
npm install manifest-rev
yarn:
yarn add manifest-rev
Usage
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'))
ejs
<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>
API
-
manifestRev(options) - accepts a required options argument for setup. Returns middleware for use in app.use statement (which in turn binds to ctx.state a helper function called manifest). Here are the properties accepts in the options argument.
manifest (required) - path to a valid rev-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 passed prepend: '/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 when manifestRev is invoked in your app. Returns the string found from a lookup in your rev-manifest.json file for the str argument passed (e.g. if you type {{ manifest('foo.js'); }} in your view, then it returns for the value of the foo.js property as defined in your manifest file, such as foo-0775041dd4.js). If the found is not found, then the input str argument is returned.
Breaking changes in 2.0
manifest(str) is now manifest(str, prop) which now accepts a following property within your rev-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 the foo.js file integrity property as defined in your manifest file, such as sha256-YEWYfCFP9yc5DAF8K5AtLEyFuKZ1MNw+xQPm8g70LYY=). If the found is not found, then the input str argument is returned.
Contributors
License
MIT © Nick Baugh