天天看点

yeoman工具的使用以及自定义脚手架前言脚手架原理(工作过程)yeoman基本使用自定义generator

yeoman工具的使用以及自定义脚手架

  • 前言
  • 脚手架原理(工作过程)
  • yeoman基本使用
    • 1.安装yarn
    • 2.安装yo
    • 3.安装generator-generator
    • 4.在根目录下运行yo generator
    • 5.创建项目 test
  • 自定义generator
    • 1.创建项目,并切换到该项目
    • 2.yarn(或npm) init初始化项目,生成package.json文件
    • 3.执行yarn add yeoman-generator
    • 4.在项目根目录下面创建generator/app/index.js
    • 5.yarn link 将这个模块链接到全局
    • 6.执行yo sample-vue

前言

yeoman是一款搭建web应用脚手架工具,可以通过yeoman搭配不同的genrator(项目生成器)去创建任何类型的项目,还可以创建自己的generator来定制脚手架。

脚手架原理(工作过程)

1.通过交互命令询问用户问题

2.根据用户回答生成文件相应的文件结构

yeoman基本使用

1.安装yarn

npm install -g yarn
           

2.安装yo

sudo yarn global add yo
           

注意点:

  • yarn 报错超时 unexpected error occurred: “https://registry.yarnpkg.com/yo: ETIMEDOUT”.

    按下面一步步更换yarn地址

npm config set registry https://registry.npm.taobao.org  
npm config set disturl https://npm.taobao.org/dist  
yarn config set sass-binary-site http://npm.taobao.org/mirrors/node-sass
           

3.安装generator-generator

sudo npm install -g generator-generator
           

4.在根目录下运行yo generator

yo generator-generator
           

注意点:

直接运行yo,可以选择不同的项目生成器

yo
           

不过要在之前先安装项目生成器,例如安装生成vue项目的generator-vue2,可以在npm官网通过搜索“generator-”找到很多生成器

npm install -g generator-vue2
           
yeoman工具的使用以及自定义脚手架前言脚手架原理(工作过程)yeoman基本使用自定义generator

5.创建项目 test

yo vue2
           
yeoman工具的使用以及自定义脚手架前言脚手架原理(工作过程)yeoman基本使用自定义generator

生成的项目结构如下:

yeoman工具的使用以及自定义脚手架前言脚手架原理(工作过程)yeoman基本使用自定义generator

yarn link

yeoman工具的使用以及自定义脚手架前言脚手架原理(工作过程)yeoman基本使用自定义generator

自定义generator

generator本质上就是一个npm模块,yeoman的generator必须是以generator-name的格式,如果不采用这种格式,yeoman后续就无法找到所定义的generator

1.创建项目,并切换到该项目

mkdir generator-sample-vue
cd generator-sample-vue
           

2.yarn(或npm) init初始化项目,生成package.json文件

yeoman工具的使用以及自定义脚手架前言脚手架原理(工作过程)yeoman基本使用自定义generator

3.执行yarn add yeoman-generator

yeoman-generator提供了生成器的一个基类,这个基类中提供了一些工具函数,使生成器创建的时候更加便捷

yeoman工具的使用以及自定义脚手架前言脚手架原理(工作过程)yeoman基本使用自定义generator

4.在项目根目录下面创建generator/app/index.js

写入下面的代码(一定要保存,要不然下一步就会报错):

//主文件路径 generators→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() {
        this.fs.write(
           this.destinationPath("temp.text"),                            Math.random().toString()
        )
    }
}
           

5.yarn link 将这个模块链接到全局

在和我们刚创建的generator-sample-vue同一目录下,新建文件my-sample-vue

mkdir my-sample-vue
           
yeoman工具的使用以及自定义脚手架前言脚手架原理(工作过程)yeoman基本使用自定义generator

6.执行yo sample-vue

yo sample-vue
           
yeoman工具的使用以及自定义脚手架前言脚手架原理(工作过程)yeoman基本使用自定义generator

执行了刚刚写在generators→app →index.js里的算法Math.random().toString()

yeoman工具的使用以及自定义脚手架前言脚手架原理(工作过程)yeoman基本使用自定义generator

这样的话,我们在generator-sample-vue项目里,新建templates文件夹,随便新建一些文件在里面,如下:

yeoman工具的使用以及自定义脚手架前言脚手架原理(工作过程)yeoman基本使用自定义generator

如果my-sample-vue执行yo sample-vue的话,下面的语句会一次将上面的文件写入项目(my-sample-vue)里

templates.forEach(item => {
    this.fs.copyTpl(
        this.templatePath(item),
        this.destinationPath(item)
    )
})
           
yeoman工具的使用以及自定义脚手架前言脚手架原理(工作过程)yeoman基本使用自定义generator

my-sample-vue的目录如下:

yeoman工具的使用以及自定义脚手架前言脚手架原理(工作过程)yeoman基本使用自定义generator

自定义的generator-sample-vue生成器就这样建好了。

继续阅读