In-place scaffolding with file templates
Install it globally.
npm i -g fileform
Run it within a directory that contains a fileform.config.js
file.
fileform
Pass a Github repository and a destination, and Fileform will use degit
.
fileform aleclarson/typescript-template hello-world
Fileform can cd
to the new directory if you invoke it with source
.
Try adding an alias
to your ~/.bashrc
or similar.
alias fileform="source $(npm bin -g)/fileform"
Create a configuration file.
touch fileform.config.js
Define the form values to be filled out.
exports.form = {
type: [String, ['vanilla', 'react']],
name: String,
description: String,
private: Boolean,
license: [String, 'MIT'],
keywords: Array,
}
Define side effects once the form is filled out.
exports.onForm = function({ type }) {
if (type == 'react') {
const pkg = this.readJsonSync('package.json')
pkg.dependencies['react'] = '^16.0.0'
this.writeJsonSync('package.json', pkg)
}
}
Provide functions and variables to your file templates.
exports.context = {
foo: 'bar',
reverse: (_body, _ctx, arg1) => arg1.reverse(),
}
- The
body
argument is for block calls (eg:{{#reverse}}content{{/reverse}}
). - The
ctx
argument lets you access other variables/functions. - Your context can be a
Proxy
if you want.
Possible value types:
String
Boolean
Array
Default values can be defined with a tuple like [type, default]
.
When a value type is String
and its default value is an array,
a list of choices is presented to the user.
When a value type is Array
, its default value represents a static
list of choices. If no default value is given, the user must write
in their own values.
In the onForm
handler, this
contains a few helpers.
- All
fs-extra
exports log
fromlodge
exec
from@cush/exec
prompt
fromenquirer
The end. Please open issues for any bugs or feature requests!