https://github.com/alloc/fileform
In-place scaffolding with file templates
https://github.com/alloc/fileform
Last synced: 5 months ago
JSON representation
In-place scaffolding with file templates
- Host: GitHub
- URL: https://github.com/alloc/fileform
- Owner: alloc
- License: mit
- Created: 2021-01-18T16:18:05.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2021-01-28T18:39:53.000Z (about 5 years ago)
- Last Synced: 2025-08-16T23:49:30.035Z (6 months ago)
- Language: TypeScript
- Homepage:
- Size: 371 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# fileform
[](https://www.npmjs.com/package/fileform)
[](https://github.com/prettier/prettier)
[](https://paypal.me/alecdotbiz)
In-place scaffolding with file templates

## Usage
Install it globally.
```sh
npm i -g fileform
```
Run it within a directory that contains a `fileform.config.js` file.
```sh
fileform
```
Pass a Github repository and a destination, and Fileform will use [`degit`](https://www.npmjs.com/package/degit).
```sh
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.
```sh
alias fileform="source $(npm bin -g)/fileform"
```
### fileform.config.js
Create a configuration file.
```sh
touch fileform.config.js
```
Define the form values to be filled out.
```js
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.
```js
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.
```js
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.
### `form` variables
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.
### `onForm` context
In the `onForm` handler, `this` contains a few helpers.
- All [`fs-extra`](https://github.com/jprichardson/node-fs-extra) exports
- `log` from [`lodge`](https://github.com/aleclarson/lodge)
- `exec` from [`@cush/exec`](https://github.com/aleclarson/exec)
- `prompt` from [`enquirer`](https://github.com/enquirer/enquirer)
The end. Please open issues for any bugs or feature requests!