A reusable project generator that copies file recursively, while replacing keywords from passed data.
'use strict'
const generify = require('generify')
const source = './template'
const dest = '/tmp/generify-test'
const data = { hello: 'hello world' }
// without notification
generify(source, dest, data, function (err) {
  if (err) {
    console.log(err)
  } else {
    console.log('ok!')
  }
})
// with notification
generify(source, dest, data, onData, done)
function onData (file) {
  console.log('writing file')
}
function done (err) {
  if (err) {
    console.log(err)
  } else {
    console.log('ok!')
  }
}This will replace all the __hello__ patterns found in all files
with the 'hello world' string.
If the supplied data has a key transforms, with a hash of tranformation
functions, then the found tokens will be used to run a corresponding
transform on the supplied data. Example:
const data = {
  transforms: { foo: (data, context) => data.toUpperCase() },
  foo: 'foo'
}
// __foo__ => foo_transform(data = 'foo') => 'FOO'The context object contains properties: source (input file path),
dest (output file path), key (the matched key).
files and directories located in the template folder may also be replaced. File and folder names wrapped with @ delimiters will be replaced.
Given a template with:
/template/@foo@/@[email protected]
and data:
const data = {
  foo: 'hello',
  bar: 'world'
}The outputted file will be:
<dest>/hello/world.txt
If a file begins with __ that will be automatically converted into a
.. This is useful for generating .gitignore files.
If the supplied data has a key copyAsNamed, with an array of names, then
the filenames in that list will not be processed through this rule. Each file
name in the list should not include a path,
e.g. ['__do-not-replace-underscores.js'].
generify also offers an executable that can be called with:
Usage: generify template destination [json file]
Where the json file contains the data to be replaced.
This project was kindly sponsored by nearForm.
MIT