Use o Yeoman para implementar sua própria ferramenta de andaime

Introdução e Demonstração

yeoman é um andaime de uso geral que pode ser usado para definir suas próprias ferramentas de andaime

Princípio fundamental:

yo + geradores diferentes = projetos diferentes

Use rapidamente um gerador para construir projetos

Observação: vamos gerar um modelo de desenvolvimento de plug-in eslint como exemplo! ! ! ! ! ! ! ! ! ! ! !

Primeiro, você precisa confirmar o ambiente (deve ter um ambiente de nó)

node -v
npm -v

Altere a origem do espelho para um espelho doméstico (para garantir uma velocidade de download mais rápida das dependências)

npm config set registry https://registry.npmmirror.com

dica: Você pode visualizar a fonte do espelho por meio do registro npm config get *

Instale o comando yo globalmente

npm i yo -g

Instale o gerador gerador correspondente globalmente

npm i generator-eslint -g

O formato do gerador é generator-name

Crie um projeto e entre no diretório

mkdir yeoman-eslint
cd yeoman-eslint

Execute o gerador correspondente através de você

yo eslint

O gerador pode ser omitido ao usar-

Personalize um gerador mystudy

construção do projeto

1. O próprio gerador também é um projeto, que precisa ser criado

mkdir generator-mystudy
cd generator-mystudy
npm init -y

Nota: O nome do projeto do gerador deve começar com generator-

2. Instale a classe base no projeto

npm i yeoman-generator -S

Existem muitos métodos encapsulados neste plug-in, usaremos este plug-in quando o desenvolvermos posteriormente.

3. Edite o arquivo de entrada

generator-mystudy/generators/app/index.js

Como podemos criar vários geradores, o arquivo é denominado generators

Não se preocupe com o motivo pelo qual o arquivo de entrada foi criado dessa maneira, esta é a especificação oficial e a explicaremos em detalhes posteriormente. Vamos experimentar o processo primeiro.

Desenvolva gerador de mystudy

Antes de aprender o conteúdo a seguir, reforce o estudo da classe js primeiro! !

Basta escrever uma linha de código no arquivo de entrada

// 引入生成器的父类
const Generator = require("yeoman-generator");
// 导出继承的子类
module.exports = class extends Generator {
  // 子类被new时,test方法会自动执行
  test(){
    // 这里没有使用console.log();方法,而是直接使用了父类封装的log方法,因为console在某些情况可能出错
    this.log("我的第一");
  }
};

Agora, um gerador simples está concluído. Em teoria, podemos usar diretamente npm i generator-mystudy -g localmente . No entanto, primeiro precisamos tornar o diretório generator-mystudy acessível para npm globalmente.

Visualize o diretório raiz da instalação global do npm

npm root -g

Para observar se nosso diretório está definido como um diretório global, podemos primeiro abrir o diretório raiz npm

abra esta pasta na janela

start D:\Program\node\node_modules

Vincule o projeto à raiz npm (acesso global ao projeto)

npm link

Depois de executar o comando, você pode descobrir que o atalho no diretório foi criado e agora você pode acessar o projeto globalmente.

experimente nosso gerador

yo mystudy

dica: gerador - pode ser omitido

Agora, abra o console e veja que o conteúdo do gerador está impresso. Nosso gerador já está funcionando normalmente, confira!

Melhorar o gerador de mystudy

Ideias:

  1. pergunte, obtenha informações
  2. Gerar uma estrutura de projeto predefinida
  3. instalar dependências

Antes de tudo, precisamos entender o método de construção, consulta, modelo de renderização e dependências de instalação e outras funções do Generator.

Para os seguintes nomes de função, etc., adotamos a API oficial. Este artigo se concentra na experiência. Você pode aprender sobre o uso específico no próximo artigo.

Interação com o usuário

A interação do usuário é feita por meio do método prompting , que é uma API oficial

O processo interativo aqui se refere ao conteúdo de requirejs, então podemos nos referir a requireJs para métodos de uso específicos

// 引入生成器的父类
const Generator = require("yeoman-generator");
// 导出继承的子类
module.exports = class extends Generator {
  // 构造方法可以处理自定义的命令行参数
  constructor(args, opts) {
    super(args, opts);
  }
  // 1.询问,获取信息
  prompting() {
    // prompt方法返回一个promise,用于询问用户信息,并返回一个结果对象
    return this.prompt([
      {
        // 问题类型,需要用户输入
        type: "input",
        // 信息储存的字段
        name: "projectName",
        // 提示信息
        message: "请输入项目名称:",
        // 默认值 this.appname默认是项目的文件名
        default: this.appname,
      },
      {
        type: "input",
        name: "username",
        message: "请输入您的名称:",
        default: "",
      },
    ]).then((answers) => {
      this.log(answers);
    });
  }
  // 2.生成预定义的项目结构
  // 3.安装依赖
};

Neste ponto, quando executarmos yo mystudy na linha de comando, as informações da consulta serão executadas e o objeto de informações de que precisamos será retornado

Gerar estrutura do projeto

A API de escrita oficial é usada para gerar a estrutura do diretório , e métodos como this.sourceRoot() , this.destinationRoot() e this.fs.copyTpl são usados ​​para gerar a estrutura do projeto (gerar nosso projeto de acordo com o modelo) .

// 引入生成器的父类
const Generator = require("yeoman-generator");
// 导出继承的子类
module.exports = class extends Generator {
  // 构造方法可以处理自定义的命令行参数
  constructor(args, opts) {
    super(args, opts);
  }
  // 1.询问,获取信息
  prompting() {
    .....
  }
  // 2.生成预定义的项目结构
  writing() {
    // 获取模板目录
    let srcDir = this.sourceRoot();
    // 获取目标目录(在哪里执行命令就是哪里)
    let destDir = this.destinationRoot();
    // 将目标目录内容生成到模板目录内
    this.fs.copyTpl(srcDir, destDir,this.answers);
  }
  // 3.安装依赖
};

instalar dependências

Caso queira instalar automaticamente as dependências ao gerar o projeto, basta executar o método install .

// 引入生成器的父类
const Generator = require("yeoman-generator");
// 导出继承的子类
module.exports = class extends Generator {
  // 构造方法可以处理自定义的命令行参数
  constructor(args, opts) {
    super(args, opts);
  }
  // 1.询问,获取信息
  prompting() {
    .....
  }
  // 2.生成预定义的项目结构
  writing() {
   ....
  }
  // 3.安装依赖
  install() {
    this.env.options.nodePackageManager = "npm"
    console.log('this.env.options: ', this.env.options);
  }

  end(){
    this.log("项目创建成功")
  }
};

Até agora, um gerador personalizado básico tomou forma.

Acho que você gosta

Origin blog.csdn.net/weixin_46769087/article/details/128167546
Recomendado
Clasificación