hcp
v0.3.1
Published
Like cp, but with Handlebars template
Downloads
15
Readme
hcp
hcp - handlebars-copy
Like cp, but with Handlebars template
Install
npm install hcp
Usage
$ hcp <files...> [options]
Options:
--help Show this help output
--version Show package version
--debug Show extended debug output
Examples:
$ hcp package.json package.copy.json
$ hcp index.html package.json app/ --name foobar
$ hcp_name="foobar" hcp text/examples/* ~/dev/myapp/app
Description
hcp is a CLI tool similar to the cp
command.
File copy is done using Streams, with lodash.template
parsing files if they
have template placeholders {{ ... }}
.
Handlebars template are executed in the context of the following object:
Object.assign({}, env, opts)
// where `env` and `opts` have the following structure
{
env: {
PATH: '...',
...
},
opts: {
debug: true,
name: 'Foobar'
}
}
The templates context is a merged version of various sources, with the following order of precedence:
- opts - Command line flags as parsed by minimist
- env -
process.env
variables begining withhcp_
- prompts - Generated prompts, see below
Prompts
Handlebars templates can have any number of placeholders. Variables are either available in the context object, or automatically prompted for the user to enter a value.
Skipping a prompt is then available with --name Value
.
To enable it, inquirer must be installed and available in node_modules
.
npm i inquirer -D
If not installed, prompts are not generated.
JSON
JSON files are merged together with destination, if it already exists.
Tests / API
hcp
cli
Copy files
hcp test/examples/package.json test/output.json.
hcp('test/examples/package.json test/output.json')
.expect(0)
.end(() => {
assert.deepEqual(require('./output.json'), {
name: 'input',
description: '',
foo: 'bar'
});
done();
});
Merges files with existing JSON destination
hcp test/examples/package.json test/existing.json.
hcp('test/examples/package.json test/existing.json')
.expect(0, (err) => {
if (err) return done(err);
assert.deepEqual(require('./existing.json'), {
name: 'output',
description: '...',
foo: 'bar',
bar: true
});
fs.writeFile(path.join(__dirname, 'existing.json'), JSON.stringify({
name: 'output',
description: '...',
bar: true
}, null, 2), done);
});
Transfrom Handlebars / Mustache like placeholders with lodash.template
hcp test/examples/* test/output/ --name blah --description desc --foo bar.
hcp('test/examples/* test/output/ --name blah --description desc --foo bar')
.expect(0, (err) => {
if (err) return done(err);
assert.deepEqual(require('./output/package.json'), {
name: 'input',
description: '',
foo: 'bar'
});
assert.deepEqual(require('./output/tpl.json'), {
name: 'blah',
description: 'desc',
foo: 'bar'
});
done();
});