Generator Tool
Workflow tool for scaffolding projects.
The streaming scaffold system.
It is easy to learn and easy to use, more efficient.
If you want to use a scaffold, the scaffold should be adapted to gt, but it is much more simpler than yeoman.
- vivaxy/gt-react-scaffold webpack, babel, react, redux, router...
- vivaxy/gt-front-end-scaffold webpack, babel, eslint...
Make sure your git version >= 2.7.0
Make sure you have installed nodejs
sudo npm i -g granturismo
gt
gt help
gt init
gt config list
gt config add scaffold-name git-repo
gt config remove scaffold-name
Implement scripts/gt.js
, adding project info into user config.
See gt-react-scaffold and gt-front-end-scaffold for examples.
If you want to use es6 in gt.js
, please use babel-register
or babel-built js.
// using `babel-register`
if (!global._babelPolyfill) {
require('babel-polyfill');
}
require('babel-register');
module.exports = require('./gt/index');
GT cli invokes methods in scaffold/scripts/gt.js
, and passing options into init
.
// gt.js
/**
* `ask` will be invoked first
* prompt questions
* `config` returned will be passed into `init` and `after` by `options.config`
*/,
export const ask = async(options) => {
return config;
};
export const init = async(options) => {
};
export const after = async(options) => {
};
// options
{
project: {
folder: '/absolute/path/to/project/folder',
name: 'project-name', // same as project folder name
git: {
repositoryURL: 'git://git-url', // mainly used for package.json repository.url
},
},
scaffold: {
folder: '/absolute/path/to/scaffold/folder', // mostly ~/.gt/scaffold-name
name: 'scaffold-name',
},
presets: {
copyFiles: async() => {},
writeFile: async() => {},
updateFile: async() => {},
writeJson: async() => {},
updateJson: async() => {},
removeFiles: async() => {},
},
}
/**
* listr context
* do not modify existing attributes
* if you want to passing variables in listr context, add a new attribute
*/
{
selectedScaffoldName,
selectedScaffoldRepo,
selectedScaffoldFolder,
projectGT: {}, // js object required from `./scripts/gt.js`
GTInfo: {}, // options
}
fileList
Array[String]
is an array containing filename your want to copy
eg.
const copyFiles = async() => {
const {
presets,
} = options;
const files = [
`docs`,
`mock-server`,
`source`,
`.babelrc`,
`.editorconfig`,
`.gitignore`,
`LICENSE`,
`webpack.config.js`,
];
await presets.copyFiles(files);
};
Write string into file under project folder
filter {Function}
filter(input {String}) => output {String}
Read file from scaffold, passing into filter
, write filter result into file under project folder
filter {Function}
filter(input {String}) => output {String}
Read file from scaffold, passing into filter
, write filter result into file under project folder
Same as writeFile
, but passing json object into second parameter
filter {Function}
filter(input {Object}) => output {Object}
Same as updateFile
, but passing json object into filter
fileList
Array[String]
is an array containing filename your want to copy
Same as copyFiles
, but remove files in project folder
make sure you have submitted your changes
npm run release