Skip to content

Commit c573731

Browse files
author
Lukas Oppermann
committed
init version
1 parent 4af27a1 commit c573731

File tree

7 files changed

+967
-0
lines changed

7 files changed

+967
-0
lines changed

cli.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/usr/bin/env node
2+
'use strict'
3+
4+
const argv = require('yargs').argv
5+
const meow = require('meow')
6+
const nodeFileRev = require('./node-file-rev')
7+
8+
const cli = meow(`
9+
Usage
10+
$ node-file-rev <input>
11+
12+
Options
13+
--manifest, -m Specify the path to the manifest file, default rev-manifest.json
14+
15+
Examples
16+
$ node-file-rev assets/css/app.css,assets/js/app.js --manifest=assets/rev-manifest.json
17+
`, {
18+
flags: {
19+
manifest: {
20+
type: 'string',
21+
alias: 'm',
22+
default: 'rev-manifest.json'
23+
}
24+
}
25+
})
26+
nodeFileRev(cli.input[0], cli.flags, cli)

node-file-rev.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
const hasha = require('hasha')
2+
const fs = require('fs')
3+
const editJsonFile = require('edit-json-file')
4+
const chalk = require('chalk')
5+
6+
module.exports = (files, flags, cli) => {
7+
if (files === undefined) {
8+
console.log(chalk.bold.red('⛔ ERROR: An input file needs to be provided.'))
9+
cli.showHelp()
10+
return
11+
}
12+
// if argumens are provided
13+
files.split(',').filter(file => file.length > 0).forEach( filePath => {
14+
hasha.fromFile(filePath, { algorithm: 'md5' }).then(hash => {
15+
// split filename
16+
let fileArray = filePath.split('.')
17+
// get file path without extension
18+
let filename = fileArray.slice(0, -1).join('.')
19+
// get file extension
20+
let extension = fileArray.pop()
21+
// create hashed filename
22+
let newFilename = `${filename}-${hash}.${extension}`
23+
// append hash to file
24+
fs.rename(filePath, newFilename, (err) => {
25+
if (err) {
26+
throw err
27+
}
28+
// If the file doesn't exist, the content will be an empty object by default.
29+
let jsonFile = editJsonFile(flags.manifest)
30+
// add file version
31+
jsonFile.set(filePath.replace(/\./g, '\\.'), newFilename)
32+
// save to json
33+
jsonFile.save()
34+
})
35+
})
36+
})
37+
38+
}

0 commit comments

Comments
 (0)