Top Related Projects
A collection of common interactive command line user interfaces.
node.js command-line interfaces made easy
Process execution for humans
Elegant terminal spinner
Node.js: extra methods for the fs object like copy(), remove(), mkdirs()
A cross platform solution to node's spawn and spawnSync
Quick Overview
Yeoman is a scaffolding tool for modern web applications. It helps developers quickly set up new projects with best practices and tools, allowing them to focus on building features rather than setting up boilerplate code.
Pros
- Highly customizable and extensible through generators
- Promotes best practices and consistent project structures
- Large ecosystem of community-created generators
- Integrates well with popular build tools and task runners
Cons
- Learning curve for creating custom generators
- Some generators may become outdated if not maintained
- Can be overkill for small projects
- Dependency on Node.js ecosystem
Code Examples
- Creating a new generator:
const Generator = require('yeoman-generator');
module.exports = class extends Generator {
writing() {
this.fs.copyTpl(
this.templatePath('index.html'),
this.destinationPath('public/index.html'),
{ title: 'My New Project' }
);
}
};
- Prompting user for input:
module.exports = class extends Generator {
async prompting() {
this.answers = await this.prompt([
{
type: 'input',
name: 'name',
message: 'Your project name',
default: this.appname
}
]);
}
};
- Installing dependencies:
module.exports = class extends Generator {
install() {
this.npmInstall(['lodash'], { 'save-dev': true });
}
};
Getting Started
To use Yeoman, first install it globally:
npm install -g yo
Then, install a generator:
npm install -g generator-webapp
Create a new project:
yo webapp
Follow the prompts to customize your project. Yeoman will scaffold the project structure and install dependencies.
Competitor Comparisons
A collection of common interactive command line user interfaces.
Pros of Inquirer.js
- Focused solely on command-line user interfaces, providing a more specialized and refined experience
- Offers a wide range of question types and customization options for prompts
- Lightweight and easy to integrate into existing projects
Cons of Inquirer.js
- Limited to input/output functionality, lacking the full project scaffolding capabilities of generator
- Requires more manual setup and configuration for complex workflows
Code Comparison
Inquirer.js:
const inquirer = require('inquirer');
inquirer.prompt([
{
type: 'input',
name: 'projectName',
message: 'What is your project name?'
}
]).then(answers => {
console.log(`Creating project: ${answers.projectName}`);
});
generator:
const Generator = require('yeoman-generator');
module.exports = class extends Generator {
async prompting() {
this.answers = await this.prompt([
{
type: 'input',
name: 'projectName',
message: 'What is your project name?'
}
]);
}
writing() {
this.log(`Creating project: ${this.answers.projectName}`);
}
};
Summary
Inquirer.js excels in creating interactive command-line interfaces with a variety of prompt types, while generator offers a more comprehensive solution for project scaffolding and generation. The choice between the two depends on the specific needs of your project, with Inquirer.js being ideal for focused user input scenarios and generator better suited for full project setup and boilerplate generation.
node.js command-line interfaces made easy
Pros of Commander.js
- Lightweight and focused on command-line parsing
- Simpler learning curve for basic CLI applications
- Extensive documentation and examples
Cons of Commander.js
- Less suitable for complex project scaffolding
- Limited built-in functionality for file manipulation
- Requires additional libraries for advanced features
Code Comparison
Commander.js:
const program = require('commander');
program
.version('0.1.0')
.option('-p, --peppers', 'Add peppers')
.option('-c, --cheese <type>', 'Add cheese')
.parse(process.argv);
Generator:
const Generator = require('yeoman-generator');
module.exports = class extends Generator {
prompting() {
return this.prompt([{
type: 'input',
name: 'name',
message: 'Your project name'
}]).then((answers) => {
this.answers = answers;
});
}
};
Commander.js is more focused on parsing command-line arguments and options, while Generator provides a more comprehensive framework for creating project scaffolds and complex file operations. Commander.js is better suited for simpler CLI applications, whereas Generator excels in creating full-featured project generators with interactive prompts and extensive file manipulation capabilities.
Process execution for humans
Pros of execa
- Lightweight and focused on executing shell commands
- Promise-based API for easier async handling
- Cross-platform support with consistent behavior
Cons of execa
- Limited to command execution, lacks scaffolding capabilities
- Doesn't provide a comprehensive project generation framework
- Requires additional tools for complex project setup
Code Comparison
execa:
const execa = require('execa');
(async () => {
const {stdout} = await execa('echo', ['hello world']);
console.log(stdout);
})();
generator:
const Generator = require('yeoman-generator');
module.exports = class extends Generator {
writing() {
this.fs.copyTpl(
this.templatePath('index.html'),
this.destinationPath('public/index.html'),
{ title: 'My New Project' }
);
}
};
Key Differences
- Purpose: execa focuses on command execution, while generator is for scaffolding projects
- API: execa uses a simple Promise-based API, generator employs a more complex OOP approach
- Functionality: execa is specialized for running commands, generator offers a full suite of project generation tools
- Use cases: execa is ideal for task runners and build scripts, generator excels in creating new project structures
- Learning curve: execa is easier to pick up and use quickly, generator requires more time to master its features
Elegant terminal spinner
Pros of ora
- Lightweight and focused on terminal spinners and progress indicators
- Simple API for creating and managing elegant CLI spinners
- Supports custom spinner styles and colors
Cons of ora
- Limited to spinner functionality, not a full-featured scaffolding tool
- Lacks the extensive plugin ecosystem found in generator
Code Comparison
ora:
const ora = require('ora');
const spinner = ora('Loading...').start();
setTimeout(() => {
spinner.succeed('Operation completed');
}, 2000);
generator:
const Generator = require('yeoman-generator');
module.exports = class extends Generator {
writing() {
this.fs.copyTpl(
this.templatePath('index.html'),
this.destinationPath('public/index.html'),
{ title: 'My New Project' }
);
}
};
Key Differences
- generator is a comprehensive scaffolding framework for creating project templates and boilerplates
- ora focuses solely on providing elegant terminal spinners and progress indicators
- generator offers a more extensive set of features for project generation and customization
- ora is better suited for adding visual feedback to CLI applications
- generator has a steeper learning curve but provides more flexibility for complex project setups
Node.js: extra methods for the fs object like copy(), remove(), mkdirs()
Pros of node-fs-extra
- Focused on file system operations, providing a more comprehensive set of utilities
- Simpler API for common file system tasks, reducing boilerplate code
- Promises-based API for easier asynchronous operations
Cons of node-fs-extra
- Limited to file system operations, lacking the scaffolding capabilities of generator
- Does not provide a CLI or interactive prompts for generating project structures
- May require additional libraries for more complex project setup tasks
Code Comparison
node-fs-extra:
const fs = require('fs-extra');
fs.copy('/tmp/myfile', '/tmp/mynewfile')
.then(() => console.log('File copied successfully'))
.catch(err => console.error(err));
generator:
const Generator = require('yeoman-generator');
module.exports = class extends Generator {
writing() {
this.fs.copy(
this.templatePath('myfile'),
this.destinationPath('mynewfile')
);
}
};
Summary
node-fs-extra excels in file system operations with a user-friendly API, while generator offers a more comprehensive solution for project scaffolding. node-fs-extra is ideal for projects requiring extensive file manipulation, whereas generator is better suited for creating complex project structures with interactive prompts and customization options.
A cross platform solution to node's spawn and spawnSync
Pros of node-cross-spawn
- Focused on cross-platform process spawning
- Lightweight and specialized for a single task
- Easier to integrate into existing projects
Cons of node-cross-spawn
- Limited in scope compared to generator's full scaffolding capabilities
- Lacks built-in templating and project generation features
- May require additional libraries for more complex tasks
Code Comparison
node-cross-spawn:
const spawn = require('cross-spawn');
const result = spawn.sync('npm', ['install'], { stdio: 'inherit' });
generator:
const Generator = require('yeoman-generator');
module.exports = class extends Generator {
install() {
this.npmInstall();
}
};
Key Differences
- node-cross-spawn focuses on process spawning across platforms
- generator provides a comprehensive scaffolding solution
- node-cross-spawn is more suitable for specific cross-platform command execution
- generator offers a complete framework for creating project templates and generators
Use Cases
node-cross-spawn:
- Cross-platform script execution
- Running shell commands in Node.js applications
- Integrating with build tools and task runners
generator:
- Creating project scaffolds and boilerplates
- Generating code and project structures
- Building custom generators for various frameworks and tools
Both libraries serve different purposes, with node-cross-spawn being a specialized tool for cross-platform process spawning, while generator offers a more comprehensive solution for project scaffolding and code generation.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Generator

Rails-inspired generator system that provides scaffolding for your apps
Getting Started
If you're interested in writing your own Yeoman generator we recommend reading the official getting started guide. The guide covers all the basics you need to get started.
A generator can be as complex as you want it to be. It can simply copy a bunch of boilerplate files, or it can be more advanced asking the user's preferences to scaffold a tailor made project. This decision is up to you.
The fastest way to get started is to use generator-generator, a Yeoman generator to generate a Yeoman generator.
After reading the getting started guide, you might want to read the code source or visit our API documentation for a list of all methods available.
Debugging
See the debugging guide.
Contributing
We love contributors! See our contribution guideline to get started.
Sponsors
Love Yeoman work and community? Help us keep it alive by donating funds to cover project expenses!
[Become a sponsor]
License
BSD license Copyright (c) Google
Top Related Projects
A collection of common interactive command line user interfaces.
node.js command-line interfaces made easy
Process execution for humans
Elegant terminal spinner
Node.js: extra methods for the fs object like copy(), remove(), mkdirs()
A cross platform solution to node's spawn and spawnSync
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot