如何自定义一个自己的脚手架,而不是使用官方提供的如create-react-app等脚手架,因为做项目的时候我们自己要配置很多定制的内容,而这些是官方脚手架没有的。所以我们需要自己来创建一个符合当前项目的脚手架。
1.创建一个全局的自定义命令
1.1打开一个没有任何内容的文件夹,新建一个bin的文件夹,在bin文件夹下创建一个js文件,js文件自己随便取名。
1.2在你创建的js文件中的开头写入如下代码
#! /usr/bin/env node
/usr/bin/env就是让系统使用node来执行你的脚本文件。
1.3在终端下进入你的根目录
输入命令
npm init
命令执行完成后,进入package.json文件中会有如下的代码。
1.4在终端的根目录下输入npm link命令。
命令完成后,在你的终端输入bin下面的属性值,比如我就应该输入ymz,这里你输入的自定义全局命令是你在使用npm init时,project的name。
这时候就会输出ymz。如果你能正确的输出内容,那么你的全局自定义命令就创建好了。
2.使用commander库用于创建自定义的命令
2.1安装commander库
npm install commander
2.2使用commander提供的方法
//commander插件,用于解析命令行参数
const {program} = require('commander');
//当在终端使用 ymz -s 或者 ymz --save时会显示save something
//这个方法就是添加帮助项,<save>表示传递的参数,使用时应该这样使用 ymz -s xxxx 或者 ymz --save xxxx
program.option('-s --save <save>','save something');
program//[args...]表示你输入的命令后面的所有参数,比如下面的a b c d
.command('create <project> [args...]')//command是创建一个命令比如:ymz create xxxx a b c d
.alias('crt')//给你的create命令取别名为crt 使用时可以ymz crt xxxx
.description('create a project')//对这个命令进行描述
.action((project,args)=>{//运行这个你定义的命令是要做什么事情,在回调函数中处理你要做的逻辑
//do something
console.log(project);
console.log(args);
})
运行命令 ymz create demo a b c d这个demo是我们的项目名,a b c d是命令行的参数
3.和命令行进行交互式操作
3.1使用inquirer库
安装:
npm install --save inquirer@^8.0.0
如果你安装了9.0.0及以上的版本,那么你在引入inquirier时不能使用require的引入方式
npm install --save inquirer@^8.0.0
8.0.0及以下的引入方式
const inquirer = require('inquirer');
const inquirer = require('inquirer');
inquirer.prompt(([{
type:'list',
choices:['react','vue'],
name:'framework'
message:'please choose one framework about your want to create project',
}])).then(answer=>{
console.log(answer)
})
inquirer的阅读文档如下