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
github
avecgitee码云
:À 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
github
ou码云
surhttps
/ssh
lien d'adresse de clonage;branche : le github ou le nuage de code où se 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 testPTM
fichier de projet nommé dans la fenêtre actuelle !
ptm-cli
Dé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);
- ···
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
});- ···
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).
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!'));
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 ()
- ···
6) rimraf
rm -rf
Commandes 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)
- ···
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.json
le fichier, à son tour monté 步骤1
en cours d' 6个
utilisation dans les bibliothèques tierces npm: npm install xxx -g
(l'écriture peut également être directement dépendante package.json
du est dependences
effectuée directement npm install
);
ouvrir le package.json
fichier, ajouter la phrase de commande du terminal ( bin
la 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 bin
et créez package.json
les 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:
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-init
commander les paramètres nécessaires pour 输入参数进行判断
lire les template.json
informations 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 publish
libé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!
- Vérification du téléchargement local
Ouvrez le terminal local et entreznpm install ptm-cli -g
le package npm pour télécharger et installer le package npm publié. Après l'installation, la commande personnalisée est valide!
- Vérification du téléchargement local
- 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!