donejs / donejs/cli

Override Generators

Open
#104 3 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
JavaScript
Stars
6
Forks
7
PR merge metrics
No merged PRs in 30d

Description

# What
A related issue (donejs/generator-donejs#140) outlines the method of using the `.donejs` folder to customize a generator's templates. It would be nice to have the ability to custom the generator itself.

# Why
For a `react-view-model` project. Since a custom element tag name that the component prompt collects doesn't translate well to a react component so I'd like to change the prompt and it's validation.

You could also do things like making a component generator that prompts you for a type and builds one of several predefined types.

# How
My immediate thought would be to modify the [`add`](https://github.com/donejs/cli/blob/master/lib/cli/cmd-add.js) command to do something like:
```js
var path = require('path');
var utils = require('../utils');
var generate = require('./cmd-generate');
var debug = require('debug')('donejs-cli:add');

module.exports = function(root, name, params) {
var generators = require(path.join(root, 'node_modules', 'generator-donejs'));
var customGeneratorPath = path.join(process.cwd(), '.donejs', 'name', 'index.js');

// Use the custom generator here!
if (fs.exists(customGeneratorPath)) {
return utils.generate(root, '.donejs', [name].concat(params))
}

if (generators[name]) {
debug('add called but running generate instead', name, params);
return generate(root, name, params);
}

debug('add', name, params);
return utils.add(path.join(root, 'node_modules'), name, params);
};
```

# Comments Please 😃
I am happy to implement this in my spare time because I'd like to see it done ASAP. I just would like a little input first so I know if I am heading down the wrong path before I start.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.