Échafaudage de gestion de modèle de projet Développement PTM-CLI

Un, instructions ptm-cli

  project template manager cli

  Outil échafaudage pour un modèle de projet / gestion de projet, avec 添加模板/项目, 编辑模板/项目, 删除模板/项目, 查看模板/项目et 下载项目, et根据模板初始化项目 d' autres fonctions.

1. Caractéristiques

  • ptm-cli est compatible githubavecgitee码云 :

    À l'heure actuelle, de nombreux échafaudages auto-développés ne peuvent télécharger que des modèles / projets sur github (utilisation sous-jacente download-git-repo). Nécessaire; actuellement, il n'y a pas de roues d'échafaudage compatibles avec Mayun!

  • Fonctions de gestion complètes :

    La plupart des échafaudages initialisent et téléchargent uniquement un certain modèle, et n'ont que la fonction d'initialisation spécifiée; ptm-cli peut le faire 模板和项目进行管理, non seulement depuis 由添加删除开源的优秀项目(comme vue), mais aussi 添加删除编辑自己开发的项目模板;

2. Installation

$ npm install ptm-cli -g

3. Utilisez

1) Commandes d'aide de base

Après l'installation, entrez les commandes correspondantes sur le terminal de l'ordinateur pour afficher et exécuter les opérations associées.

# 查看脚手架可执行的相关命令语句
$ ptm 

# 查看当前版本
$ ptm -V

# 查看帮助
$ ptm -h

2) Ajouter un modèle / projet

entrez la commande:

$ ptm-add

Entrez les informations pertinentes comme demandé par le terminal:

Nom du modèle : modèle ajouté 自定义命名(il est recommandé d'utiliser la citation);

url : modèle / projet githubou 码云sur https/ssh lien d'adresse de clonage;

branche : le github ou le nuage de codese trouve le modèle / projet 分支名(maître par défaut);

delGitInfo : s'il faut supprimer le modèle / projet 原作者git的开发信息(par défaut true delete), le paramètre par défaut pour la gestion des modèles est recommandé d'être true, c'est-à-dire que le modèle d'initialisation ne contient pas les informations git d'autres personnes, pour la gestion de projet (propre projet), il est recommandé de garder le git lié à votre propre développement information;

description : description du modèle / projet (vide par défaut);

exemple:

xxx % ptm-add  
? 请输入模板名称 vpblogs
? 请输入模板地址(https/ssh) [email protected]:goodloving/vpblogs.git
? 请输入模板分支(默认master) master
? 是否删除模板中.git信息(默认删除) true
? 请输入模板描述(默认为空) 基于vuepress创建个人博客主页的模板工程

添加模板成功!

最终的模板列表为:
   vpblogs
     url:[email protected]:goodloving/vpblogs.git
     branch:master
     description:基于vuepress创建个人博客主页的模板工程
     delGitInfo:true
xxx % 

3) Modifier le modèle / projet

entrez la commande:

$ ptm-edit templateName key content

Entrez les informations pertinentes comme demandé par le terminal:

templateName : I 添加过的模板/项目名;

key : Le modèle / projet que vous souhaitez modifier 关键信息, y compris: url , branche , delGitInfo , description ;

contenu : 内容进行编辑替代le contenu correspondant au mot-clé ;

Exemple (modifier les informations delGitInfo des modèles de vpblogs):

xxx % ptm-edit vpblogs delGitInfo false

修改模板成功!

最终的模板列表为:
   vpblogs
     url:[email protected]:goodloving/vpblogs.git
     branch:master
     description:基于vuepress创建个人博客主页的模板工程
     delGitInfo:false
xxx % 

4) Afficher le modèle / projet

entrez la commande:

$ ptm-list

exemple:

xxx % ptm-list

模板列表为:
   vpblogs
     url:[email protected]:goodloving/vpblogs.git
     branch:master
     description:基于vuepress创建个人博客主页的模板工程
     delGitInfo:false
xxx % 

5) Supprimer le modèle / projet

entrez la commande:

$ ptm-del

exemple:

xxx % ptm-del
? 请输入要删除的模板名称 vpblogs

删除模板成功!

最终的模板列表为:
xxx % 

6) Nouveau / initialiser le projet basé sur le modèle

entrez la commande:

$ ptm-init vpblogs testPTM

Exemple (nouveau projet testPTM basé sur des modèles de vpblogs):

xxx % ptm-init vpblogs testPTM

开始创建项目~ 

✔ 正在创建中···

项目创建成功~ 

开始你的项目开发!
xxx % 

Une fois l'exécution terminée 终端所在目录, vous pouvez voir le testPTMfichier de projet nommé dans la fenêtre actuelle !

ptm-cliDéveloppement de deux échafaudages

1. Réserve de connaissances

1) commandant

Une node.js 命令行解决方案bibliothèque npm tierce complète utilisée pour traiter les commandes d'entrée et écrire des instructions de ligne de commande dans la ligne de commande du terminal.

API commune:

  • Déclarer la variable de programme

    const {programme} = require ('commander');

  • Numéro de version de sortie de ligne de commande

    programme.version ('0.0.1');

  • Sortie d'invite de commande

    program.usage ("\ <commande> [Options]");

  • Invite standard d'entrée de commande unique de sortie de ligne de commande

    program.command ("ptm-add", "Ajouter une bibliothèque de modèles!")

  • Analyser les paramètres de ligne de commande

    program.parse (process.argv);

  • ···

commandant api détaillé

2) demandeur

Traitement de la bibliothèque npm tierce 可交互intégrée de node.js.命令行界面

API commune:

  • Déclarez la variable de recherche

    const inquirer = require ('inquirer');

  • Utilisation spécifique

    Enquêteur
    .prompt ([
    / Insérer des questions qui peuvent être fournis de manière interactive /
    ])
    .Ensuite (réponses => {
    // paramètres d' entrée reçus dans la ligne de commande
    })
    .catch (error => {
    // Obtenir le rapport d'erreur
    });

  • ···

api détaillé du demandeur

3) git-clone

克隆Une git存储库bibliothèque npm tierce via des commandes shell .

API commune:

  • Déclarer des variables git-clone

    const clone = require ('git-clone');

  • Utilisation spécifique

    clone (repo, targetPath, [options], cb);
    Clonez le dépôt git d'un chemin de repo vers le répertoire targetPath, la fonction de rappel cd est utilisée pour capturer le résultat du clonage;

    • Paramètres facultatifs:
      • git: Le chemin binaire de git (facultatif).
      • shallow: lorsque true, la profondeur de clonage est de 1 (facultatif).
      • checkout: passer à la branche actuelle (facultatif).

API détaillée de git-clone

4) craie

Modifiez 样式la bibliothèque npm tierce pour la sortie du terminal .

API commune:

  • Déclarez la variable craie

    const craie = exiger ('craie');

  • Utilisation spécifique

    console.log (chalk.blue ('Bonjour tout le monde!'));

api détaillé de craie

5) maintenant

Ajoutez une élégante 终端转轮bibliothèque npm tierce.

API commune:

  • Déclarez la variable ora

    const ora = require ('ora');

  • Utilisation spécifique

    const spinner = ora ('Contenu rapide ···');

  • Commencez à montrer le coureur

    spinner.start ()

  • Coureur d'affichage des erreurs / échecs

    spinner.fail ()

  • Affichage réussi du coureur

    spinner.succeed ()

  • ···

ora API détaillée

6) rimraf

rm -rfCommandes de package , utilisées 删除文件和文件夹par les bibliothèques npm tierces.

API commune:

  • Déclarez la variable rimraf

    const rm = require ("rimraf"). sync;

  • Utilisation spécifique, supprimez le fichier / dossier spécifié

    rm (fichier, [opts], rappel)

  • ···

API détaillée de Rimraf

2. Initialisez le projet

  Nouveau dossier de projet PTM_CLI, ouvre un terminal dans le dossier de projet effectue l'opération d'initialisation npm init, interagit avec le terminal pour générer les informations contenues dans package.jsonle fichier, à son tour monté 步骤1en cours d' 6个utilisation dans les bibliothèques tierces npm: npm install xxx -g(l'écriture peut également être directement dépendante package.jsondu est dependenceseffectuée directement npm install);
  ouvrir le package.jsonfichier, ajouter la phrase de commande du terminal ( binla région):

{
  "name": "ptm-cli",
  ···
  "private": false,
  "author": {
    "name": "wawoweb",
    "wechat(公众号)": "wawoweb  /  哇喔WEB",
    "wechat": "h17179797429",
    "email": "[email protected]"
  },
  "bin": {
    "ptm": "./bin/ptm.js",
    "ptm-init": "./bin/ptm-init.js",
    "ptm-list": "./bin/ptm-list.js",
    "ptm-add": "./bin/ptm-add.js",
    "ptm-del": "./bin/ptm-del.js",
    "ptm-edit": "./bin/ptm-edit.js"
  },

  ···
  "dependencies": {
    "chalk": "^4.1.0",
    "commander": "^6.2.1",
    "git-clone": "^0.1.0",
    "inquirer": "^7.3.3",
    "ora": "^5.1.0",
    "rimraf": "^3.0.2"
  }
}

En même temps, créez un nouveau répertoire sous le dossier du projet binet créez package.jsonles 6 fichiers correspondants sous le dossier bin :

./bin/ptm.js         终端命令ptm执行文件
./bin/ptm-init.js    终端命令ptm-init执行文件(根据模板初始化项目)
./bin/ptm-list.js    终端命令ptm-list执行文件(查看当前模板列表)
./bin/ptm-add.js     终端命令ptm-add执行文件(添加新的模板)
./bin/ptm-del.js     终端命令ptm-del执行文件(删除指定模板)
./bin/ptm-edit.js    终端命令ptm-edit执行文件(编辑指定模板指定信息内容)

Enfin, créez un nouveau fichier de stockage de modèle dans le répertoire racine template.json. La structure du répertoire du projet est la suivante:

image.png

3. Développement fonctionnel

Ajoutez en haut bin目录des six sous la   nouvelle création ci - dessus : Configurez le nœud #! / Usr / bin / env, qui résout les différents chemins de nœuds de différents systèmes et permet au système de trouver dynamiquement le nœud pour exécuter votre fichier de script.功能文件#!/usr/bin/env node

1) ptm (invite de commande d'échafaudage)

une analyse:

  Lorsque l'utilisateur ne comprend pas ptm-cli, l'entrée ptm peut montrer à l'utilisateur les instructions de commande disponibles et leur signification ( commander);

Code (ptm.js):

#!/usr/bin/env node
const program = require("commander");
const package = require("../package.json");

// 定义当前版本
// 定义使用方法
// 定义五个指令
program
  .version(package.version)
  .usage("<command> [Options]")
  .command("ptm-add", "新增一个模板库!")
  .command("ptm-del", "删除一个模板库!")
  .command("ptm-list", "查看模板库列表!")
  .command("ptm-edit templatename key content", "修改模板库信息!")
  .command("ptm-init templatename projectName", "基于模板库创建一个新的工程!");

// 解析命令行参数
program.parse(process.argv);

2) ptm-add (ajouter un modèle)

une analyse:

  Ajoutez le modèle spécifié par l'utilisateur à template.json et stockez-le, vous devez interagir avec l'utilisateur ( inquirer), ce qui implique la lecture et l'écriture de fichiers ( fs), et montrer le résultat de l'exécution à l'utilisateur ( chalk);

Code (ptm-add.js):

#!/usr/bin/env node
//交互式命令行库
const inquirer = require("inquirer");
//控制台样式库
const chalk = require("chalk");
//node内置文件模块库
const fs = require("fs");
//读取模板配置文件
const tpConfig = require(`${__dirname}/../template.json`);
// 打印模板列表的公共函数
const printPtmList = require("../utils").printPtmList;

//自定义交互式命令行的问答
let questions = [
  {
    name: "name",
    type: "input",
    message: "请输入模板名称",
    validate(val) {
      if (val === "") {
        return "模板名不能为空!";
      } else if (tpConfig[val]) {
        return "模板名已经存在!";
      } else {
        return true;
      }
    },
  },
  {
    name: "url",
    type: "input",
    message: "请输入模板地址(https/ssh)",
    validate(val) {
      if (val === "") return "模板地址不能为空!";
      return true;
    },
  },
  {
    name: "branch",
    type: "input",
    message: "请输入模板分支(默认master)",
    default: "master",
  },
  {
    name: "delGitInfo",
    type: "input",
    message: "是否删除模板中.git信息(默认删除)",
    default: true,
  },
  {
    name: "description",
    type: "input",
    message: "请输入模板描述(默认为空)",
    default: "",
  },
];

inquirer.prompt(questions).then((answers) => {
  // 获取用户输入的内容
  let { name, url, branch, description, delGitInfo } = answers;
  //过滤Unicode的字符
  tpConfig[name] = {
    url,
    branch,
    description,
    delGitInfo,
  };
  // 将模板信息写入template.json文件中s
  fs.writeFile(
    `${__dirname}/../template.json`,
    JSON.stringify(tpConfig),
    "utf-8",
    (err) => {
      if (err) {
        console.log(chalk.red(`\n添加模板失败:${err}\n`));
      } else {
        console.log(chalk.green("\n添加模板成功!\n"));
        console.log("最终的模板列表为:");
        printPtmList(tpConfig);
      }
    }
  );
});

Package de fonction d'impression de liste de modèles (utils.js):

const chalk = require("chalk");
const printPtmList = (tpConfig) => {
  //遍历模板展示出来
  for (const key in tpConfig) {
    if (tpConfig.hasOwnProperty(key)) {
      const item = tpConfig[key];
      console.log(chalk.blue(`   ${key}`));
      for (const i in item) {
        if (item.hasOwnProperty.call(item, i)) {
          const el = item[i];
          console.log(chalk.blue(`     ${i}:${el}`));
        }
      }
    }
  }
};
module.exports = {
  printPtmList
};

3) ptm-list 、 ptm-del 、 ptm-edit

une analyse:

  • ptm-list: lecture du fichier template.json (fs), sortie et impression des données au format json (craie);
  • ptm-del: lit le fichier template.json (fs), interagit avec l'utilisateur (demandeur), supprime les informations de modèle spécifiées et affiche le résultat supprimé (craie)
  • ptm-edit: lit le fichier template.json (fs), interagit avec l'utilisateur (enquêteur), spécifie les informations du modèle à modifier (commandant) et affiche le résultat final de la modification (craie);

Le code est simple (omis)

4) ptm-init (initialiser le projet selon le modèle)

une analyse:

  Inviter l'utilisateur à ptm-initcommander les paramètres nécessaires pour 输入参数进行判断lire les template.jsoninformations du modèle d'extraction d'informations basées sur de nouveaux projets, à partir de github, ou gitee(码云)le clone git库fichier est déterminé en fonction de la configuration requise en 是否删除原作者的git开发信息sortie init结果!

Code

ptm-init.js

#!/usr/bin/env node
const program = require("commander");
const chalk = require("chalk");
const ora = require("ora");
const gitclone = require("git-clone");
const tpConfig = require(`${__dirname}/../template`);
const rm = require("rimraf").sync;

program.usage("templatename projectName").parse(process.argv);

//判断输入情况
if (program.args.length < 1) {
  return program.help();
}
//输入参数提取
let templateName = program.args[0];
let projectName = program.args[1];
//参数校验
if (!tpConfig[templateName]) {
  console.log(chalk.red("当前模板不存在!\n"));
  return;
}
if (!projectName) {
  console.log(chalk.red("新建项目名不能为空! \n"));
  return;
}

let temp = tpConfig[templateName];
//提取模板的url
let url = temp.url;
//提取分支
let branch = temp.branch;

console.log(chalk.greenBright("\n开始创建项目~ \n"));
//显示加载图标
const spinner = ora("正在创建中···");
spinner.start();

//下载所需额外参数
let cloneOptions = {
  checkout: branch,
  shallow: branch === "master",
};

// 下载git上模板代码
gitclone(url, projectName, cloneOptions, (err) => {
  if (err) {
    spinner.fail();
    console.log(chalk.red(`\n创建项目失败:${err}\n`));
  } else {
    if (temp.deldelGitInfo) {
      // 删除.git相关文件
      rm(projectName + "/.git");
    }

    //成功
    spinner.succeed();
    console.log(chalk.green("\n项目创建成功~ \n"));
    console.log(chalk.green("开始你的项目开发!"));
  }
});

4. npm release

  • 1) Confirmez si le contenu de la version npm dans package.json est complet et correct

    • "name": "ptm-cli", // Le nom de la bibliothèque publiée sur npm
    • "version": "1.0.0", // Numéro de version de la version actuelle (le format xyz stipule: le numéro de version de x est grand, et la différence du grand numéro de version signifie qu'il n'est pas rétrocompatible; le petit numéro de version de y, la version actuelle est grandement modifiée, vers le bas Compatible; modifications mineures du code z ou modifications de bogues)
    • "description": "", // Une brève description de la bibliothèque npm
    • "private": false, // Si le paramètre est public
    • "mots clés": [], // Paramètres des mots clés pour la recherche sur npm
    • ···
  • 2) Connexion et libération de npm

    • Accédez au site Web de npm pour créer un compte;
    • Entrée du terminal npm login, entrez le nom d'utilisateur, le mot de passe et l' adresse e- mail comme demandé;
    • Entrez la npm publishlibération au terminal pour vérifier si le résultat est publié avec succès;
    • Retirez de force la bibliothèque npm libérée dans les 24 heures, entrez npm unpublish --force;
  • 3) Vérification de la version npm
    • Entrez le nom de la bibliothèque npm publié dans la recherche de site Web npm, et vous pouvez constater qu'il a été publié avec succès!

      Échafaudage de gestion de modèle de projet Développement PTM-CLI

      • Vérification du téléchargement local
        Ouvrez le terminal local et entrez npm install ptm-cli -gle package npm pour télécharger et installer le package npm publié. Après l'installation, la commande personnalisée est valide!

Je suppose que tu aimes

Origine blog.51cto.com/15066867/2573960
conseillé
Classement