Node学习第二章-创建脚手架工具

2024-06-04 05:36

本文主要是介绍Node学习第二章-创建脚手架工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开发脚手架工具

脚手架是个工具,通过输入命令创建项目初始化代码文件。

脚手架工具的特点:1.指令执行 2.可交互 3.初始化项目构架。

创建脚手架工具教学

主要步骤:

  1. 创建自定义指令
  2. 接受命令参数
  3. 设计终端交互
  4. 模块化抽离
  5. 下载远程代码
  6. 项目初始化完成提示

1. 创建全局指令

  1. 创建项目文件夹,并且在文件中新建名称为bin子文件夹,然后在bin文件夹中创建文件cli.js文件。这样做的目的是我们后续生成package.json文件时,会自动配置我们的指令。当作我们的一个全局命令入口。
  2. 终端输入:npm init 初始化脚手架信息。输入脚手架的名称,之后的配置信息默认即可。初始化结束之后,生成package.json文件,“mycli"就是我的脚手架名称,“bin”, 配置的是命令程序入口。
    在这里插入图片描述
  3. 编写cli.js程序
    首先终端使用指令:npm link 将指令全局挂载。然后在cli.js文件中代码首行配置,指令运行环境。
    在这里插入图片描述

2 接受命令参数

  1. 获取命令参数
    终端输入 mycli --help, cli.js 文件中打印这个help入参。
console.log(process.argv[2]);

在这里插入图片描述
2. 引入第三方包,处理指令参数。commander。npm install commander。commander。

// 引入commader
const {program} = require('commander');
program.parse(process.argv);

控制台 输入mycli --help, 可以看到控制提示,已经有默认的help指令。
自定义指令(“’–framwork‘ ’别名 -f‘ ’参数‘”, ‘指令说明’)

const {program} = require('commander');
program.option('-f --framwork <framwork>', '设置框架');
program.parse(process.argv);
  1. 使用commander处理自定义命令参数。
    通过.command()或.addCommand()可以配置命令,有两种实现方式:为命令绑定处理函数,或者将命令单独写成一个可执行文件。
// 第一个参数为命令名称,命令参数可以跟在名称后面,也可以用.argument()单独指定。参数可为必选的(尖括号表示)、可选的(方括号表示)或变长参数(点号表示,如果使用,只能是最后一个参数)
program.command('create <project> [destination...]' ) // 设置指令,指令
.alias('crt') // 别名
.description('创建项目') // 命令说明 自动在help生成
.action((project, args)=>{// 命令行的执行逻辑代码console.log('参数', project, args)
})
program.parse(process.argv);

3 设计终端交互

  1. npm install inquirer
  2. 代码
var inquirer = require('inquirer');
inquirer.prompt([{type: 'input',name: 'username',message: '你的名字'}
]).then((answer)=>{console.log(answer)
})
  1. 在使用中可能会提示require 不能用,建议降低inquirer的版本,npm i inquirer@8.2.0 。

4. 模块化抽离

创建lib文件夹,然后在lib中创建子文件夹core, 其中创建JS脚本,存放主要的逻辑代码。
help.js

const myhelp = function(program){program.option('-f --framwork <framwork>', '设置框架');
}
module.exports = myhelp;

command.js

const myAction = require('../core/action')
var command = (program)=>{program.command('create <project> [destination...]' ) // 设置指令,指令.alias('crt') // 别名.description('创建项目') // 命令说明 自动在help生成.action((project, args)=>{// 命令行的执行逻辑代码myAction(project, args)})
}
module.exports = command;

action.js

var inquirer = require('inquirer');
var config = require('../../config')
const myAction = (project, args)=>{// 命令行的执行逻辑代码console.log('参数', project, args)inquirer.prompt([{type: 'list',name: 'framwork',choices: config.framwork,message: '请选择你使用的框架'}]).then((answer)=>{console.log(answer)})
}
module.exports = myAction;

最后集成到bin/cli.js

#! /Users/shishuai/.nvm/versions/node/v17.0.1/bin/node
const {program} = require('commander');
const myhelp = require('../lib/core/help');
myhelp(program);
const command = require('../lib/core/command');
command(program)
program.parse(process.argv);

5 下载远程代码

项目中引入下载插件,并且在action.js中,通过用户的选择“模版”的指令,下载对应的文件。

  1. 引入插件 npm install download-git-repo
  2. 抽离下载方法,创建download.js
const download = require('download-git-repo');
const downloadFun = function(url, project) {download('direct:'+url, project,{clone:true},(err)=>{console.log(err)})
}
module.exports = downloadFun;
  1. config.js中配置不同选择项的下载路径
module.exports = {// 可选择的框架framwork:['express','koa', 'egg'],// 框架的下载地址framworkUrl:{express:'https://github.com/expressjs/express.git',koa:'https://github.com/koajs/koa.git',egg:'https://gitee.com/mirrors/eggjs.git'}
}
  1. action.js 引入使用, 核心代码展示
// 远程下载
var downloadFun = require('./download');
const myAction = async (project, args)=>{// 命令行的执行逻辑代码console.log('参数', project, args)const answer = await inquirer.prompt([{type: 'list',name: 'framwork',choices: config.framwork,message: '请选择你使用的框架'}])downloadFun(config.framworkUrl[answer.framwork],project)console.log(answer)
}
  1. 优化下载,加入laoding 动画, 加入不同的颜色字体
    引入插件 npm install ora@5。 优化动画
    引入插件 npm install chalk。优化字体

    使用插件

    
    const ora = require('ora')
    const chalk = require('chalk')
    const downloadFun = function (url, project) {const spinner = ora().start()spinner.text = '代码正在下载……'download('direct:' + url, project, { clone: true }, (err) => {if (!err) {spinner.succeed('代码下载成功')console.log(chalk.blue.bold('Done!'), chalk.bold('you run:'));console.log('cd ' + project);console.log('npm install ');console.log('npm run dev ');} else {spinner.fail('代码下载失败')}})
    }
    

这篇关于Node学习第二章-创建脚手架工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029198

相关文章

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

使用Java编写一个文件批量重命名工具

《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景处理1. 文件夹检查与遍历2. 批量重命名3. 输出配置代码片段完整代码背景在开发移动应用时,UI设计通常会提供不

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

详解Python中通用工具类与异常处理

《详解Python中通用工具类与异常处理》在Python开发中,编写可重用的工具类和通用的异常处理机制是提高代码质量和开发效率的关键,本文将介绍如何将特定的异常类改写为更通用的ValidationEx... 目录1. 通用异常类:ValidationException2. 通用工具类:Utils3. 示例文

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用