Granturismo
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.
Scaffolds
- vivaxy/gt-react-scaffold webpack, babel, react, redux, router...
- vivaxy/gt-front-end-scaffold webpack, babel, eslint...
- vivaxy/gt-node-server nodejs server
- vivaxy/gt-npm-package npm package
Installation
Make sure your git version >= 2.7.0
Make sure you have installed nodejs
npm i -g granturismo
Usage
gt
gt help
gt init
gt config list
gt config add scaffold-name git-repo
gt config remove scaffold-name
How to Scaffold Using GT?
Implement scripts/gt.js
, adding project info into user config.
If scripts/gt.js
, all files will be copied by default.
See Scaffolds for examples.
gt.js
If you want to use es6 in gt.js
, please use babel-register
or babel-built js.
// using `babel-register`if !global_babelPolyfill ;;moduleexports = ;
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` */ const ask = asyncoptions return config;;const init = asyncoptions ;const after = asyncoptions ;
// 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 username: 'vivaxy' // git configured username scaffold: folder: '/absolute/path/to/scaffold/folder' // mostly ~/.gt/scaffold-name name: 'scaffold-name' git: headHash: '23c5742ac306e561554d1cfa56b1618d30d16157' presets: copyFiles: async {} writeFile: async {} updateFile: async {} writeJson: async {} updateJson: async {} removeFiles: async {} addScaffoldInfo: 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
Presets
copyFiles(fileList)
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);
};
writeFile(file, content)
file {String}
content {String}
Write string into file under project folder.
updateFile(file, filter)
file {String}
filter {Function} filter(input) => output
input {String}
output {String}
Read file from scaffold, passing into filter
, write filter result into file under project folder.
updateFiles(files, filter)
files {Array[String]}
filter {Function} filter(input) => output
input {String}
output {String}
Read file from scaffold, passing into filter
, write filter result into file under project folder.
writeJson(file, json)
file {String}
json {Object}
Same as writeFile
, but passing json object into second parameter.
updateJson(file, filter)
file {String}
filter {Function} filter(input) => output
input {Object}
output {Object}
Same as updateFile
, but passing json object into filter
.
removeFiles(fileList)
fileList Array[String]
is an array containing filename your want to copy.
Same as copyFiles
, but remove files in project folder.
addScaffoldInfo({ scaffoldCommitHash, scaffoldVersion })
scaffoldCommitHash {String}
default:'scaffoldCommitHash'
scaffoldVersion {String}
default:'scaffoldVersion'
Update the project package.json
file, add scaffoldCommitHash
and scaffoldVersion
.
Use scaffoldCommitHash
and scaffoldVersion
as package.json
key.
If scaffoldCommitHash
or scaffoldVersion
is falsy`, it will not add this key.
How to test a scaffold project?
- Checkout a new branch, update your
gt.js
. - Use
gt config add test-scaffold-name git-repo#new-branch-name
to set a test registry. gt init
and selecttest-scaffold-name
to rungt.js
in your new branch to test.