只是简单实现,可以在 app下新建多个文件
修改写入实现
主要实现依赖于 Yeoman自定义generator
generator本质上就是一个npm模块,yeoman的generator必须是以generator-name的格式,如果不采用这种格式,yeoman后续就无法找到所定义的generator
1.创建项目目录
mkdir generator-qft-cli
cd generator-qft-cli
2.yarn(或npm) init 初始化项目,生成package.json文件
package.json
{
"name": "generator-qft-cli",
"version": "1.0.0",
"description": "qft",
"main": "index.js",
"license": "MIT",
"dependencies": {
"yeoman-generator": "^4.12.0"
}
}
3.执行 yarn add yeoman-generator
yeoman-generator提供了生成器的一个基类,这个基类中提供了一些工具函数,使生成器创建便捷
4.在项目根目录下面手动创建generator/app/index.js
//此文件作为generator的核心入口,需要导出一个继承yeoman Generator的类型
// yeomanGenerator在工作时会自动调用,我们在此类型中定义的一些生命周期函数方法
//我们在这些方法中可以通过调用父类的一些工具方法,例如文件写入
const Generator = require('yeoman-generator');
module.exports = class extends Generator {
prompting() { //用户输入输出
const prompts = [
//询问用户是否进行某些操作,y/n,可以研究一下别的生成器的操作
{
type: 'confirm',
name: 'someAnswer',
message: 'Would you like to enable this option?',
default: true
}
];
return this.prompt(prompts).then(props => {
// To access props later use this.props.someAnswer;
this.props = props;
});
}
writing() {
// 利用node 的fs写入文件,如使用gulp或者webpack可替换
// 本地只是写入一个文件生成随机数,可以换成多个文件下的目录结构
// 下方是示例而已
// const file=[//我们把我们需要复制的文件提前定义在这个数组里
// '.babelrc',
// '.editorconfig',
// '.gitignore',
// 'postcss.config.js',
// 'build/',//复制build文件夹下所有的文件
// 'src/',//复制src文件夹下所有的文件
// 'static/styles/.gitkeep'//复制静态文件夹static下的所有文件
// ];
// file.forEach((file)=>{
// this.fs.copy(this.templatePath(file),this.destinationPath(file));
// //this.templatePath()这个方法指向的地址是模板文件夹templates这个文件夹
// //this.destinationPath()这个方法指向的地址是根目录
// });
this.fs.write(
this.destinationPath("temp.text"),
Math.random().toString()
)
}
}
- yarn link 将这个模块链接到全局
利用link 节省发布,在本地全局都可以访问到
测试
新建文件夹
mkdir test
cd test
//执行
yo qft-cli
会生成新的文件并写入生成的随机数