Simple scaffolding tool using git repository for providing templates.
npm i -g pastaga
Requires node > 6.0
Pastaga does not provide any generator but it synchronizes with git repository to execute code.
Repository must respect the following specific structure :
\
+- command1
+- index.js (code to execute)
+- manifest.json (optional description file)
+- command2
+- index.js
...
You can create many context each with a different repository. Repositories are synchronized on every execution.
Pastaga has been initially created to use with vulcainjs project.
A default context is defined referencing the vulcainjs code template repository.
This repository provides commands for initialize a new project or generate artefacts. This is a good example to see how to create your own commands.
For example, try pastaga init --template vulcain-service
to create a new vulcainjs micro service.
- Create a new github repository
- Add a folder named 'MyCommand'
- Add it a file named index.js with the following code.
class Context {
*prompts() {
yield { name: 'name', type: 'input', message: "What's your name"};
}
exec() {
console.log("Hello " + this.state.name);
}
}
exports default = Context;
- Commit and publish your changes
- Set Pastaga to use your context with:
pastaga context mycontext --address <git repository address>
- Run Pastaga with
pastaga
: Display a list of commands to select. In this case, only one : MyCommand
pastaga MyCommand
: Run directly your command by requesting your name.
pastaga MyCommand --name Boy
: Execute your command and display Hello Boy
You can add an optional manifest.json file close to the index.js to customize your command. The following properties are allowed:
Name | Description | Default value |
---|---|---|
name | Command name | Folder name |
entryPoint | Context file name | index.js |
state | Initial state | {} |
description | Command description | |
order | Display order | 100 |
Context class inherit two properties:
- state which contains every command options (from initial state and prompts)
- context object exposing execution context properties. See source code for details.
exec can return a command name which will be executed in the current context.
Prompts uses inquirer.
Prompts are made in order thanks to the generator function.
Using a generator function allows you to change question based on the previous answer.
Prompt are displayed only if there is no value defined.
You can switch between context with pastaga context <name>
You can update a context with pastaga context <name> [--address <address>] [--branch <branch>] [--set key=value]*
set is used to set global initial state. Use unset key
to remove a value.
You can force a context in a command scope by adding --context <name>
to the command line.