原因是在工作中,需要开发一个脚手架,为相关用户提供相关的开发方便。适合对前端和Node操作有一定了解,同时想了解脚手架开发流程或需要自己实现一个脚手架的开发者。目标是开发一个简单的脚手架,可以提供给用户安装。能够输出相关提示。读写用户文件。在脚手架中使用shell脚本。用户交互、文件操作等更高级的内容可以查看同系列第二篇:如何实现一个高级版脚手架(Vue-cliv2.9学习篇)一步步开发脚手架的初始过程脚手架开发和普通前端项目一样,需要一个入口文件command.js和一个配置文件package.json。与其他配置文件不同的是,需要在command.js文件的第一行添加如下语句:#!/usr/bin/envnode同时需要在package.json文件中加入如下内容:{...,"bin":{"cm-cli":"command.js"}}之后在配置文件中添加此项,只需要在配置文件根目录下执行npmlink命令即可使用cm-cli--help命令查看加载的cm-cli脚手架。如果您发布您的脚手架,那么其他用户可以在使用命令npminstall-gcm-cli后全局使用您的脚手架。提示用户要提示注释和命令,我们需要用到commander包,可以使用npminstallcommander安装。(如果npm版本低于5,需要加上--save参数保证package.json配置文件更新)。Commander是一个强大的功能,提供用户命令行输入和参数解析。如有必要,您可以阅读相关的库文档。这里我介绍两种最常用的方法。option可以初始化自定义参数对象,设置关键字和描述,也可以设置和读取用户输入的参数。具体用法如下:constcommander=require('commander');commander.version('1.0.0').option('-a,--aaa','aaaaa').option('-b,--bbb','bbbbb').option('-c,--ccc[name]','ccccc').parse(process.argv);if(commander.aaa){console.log('aaa');}if(commander.bbb){console.log('bbb');}if(commander.ccc){console.log('ccc',commander.ccc);}具体显示如下:commandThis方法可以在命令行中添加一个命令。用户执行完这条命令后,就可以执行回调中的逻辑了。具体用法如下:commander.command('init').description('initextensionproject').action((extensionId)=>{console.log(`initExtensionProject"${extensionId}"`);//做你需要做的事});具体展示效果如下:读写用户文件通过以上步骤,我们已经可以完成一个简单的脚手架了。接下来,我们需要读取用户配置并为用户生成一些模板文件。读取文件现在,我们需要读取用户的cm-cli.json配置文件来做一些配置。我们可以使用Node.js的fs文件模块来读取文件的进度。由于这里难度不大,所以省略。编写文件模板我们预先将模板文件存放在CDN上,然后根据本地读取的相关脚手架配置文件下载模板。注意:在脚手架中读取的路径是用户使用时的当前路径,所以没有办法将模板文件存放在脚手架中进行读取。我们可以使用request等库来帮助我们下载文件,简化操作步骤。执行npminstallrequest`进行安装。注意:写入文件时,建议先判断文件是否存在再覆盖。从使用Shell脚本和Node.js提供的API函数的角度来看,有些人更喜欢使用Shell脚本来进行文件操作。幸运的是,我们还可以在脚手架中包含node-cmd以启用对shell脚本的支持。执行npminstallnode-cmd进行安装。具体示例如下:commander.command('init').description('initextensionproject').action((extensionId)=>{id=extensionId;console.log(`initExtensionProject"${extensionId}"`);cmd.get(`mkdir-pstatic/${extensionId}mkdirtmpmkdirtmp/source-filemkdirtmp/build-filecurl-otmp/source-file/index.jshttps://xxxxxxxx。com?filename=index.jstouchtmp/source-file/index.csscurl-otmp/build-file/server.jshttps://xxxxxxxx.com?filename=server.jscurl-otmp/build-file/router.jshttps://xxxxxxxx.com?filename=router.jscurl-otmp/build-file/package.jsonhttps://xxxxxxxx.com?filename=package.jsoncptmp/source-file/*static/${extensionId}cptmp/build-file/*./rm-frtmpnpminstall`,(err,data)=>{console.log(data)if(!err){console.log('初始化成功');返回;}console.error('初始化错误');});});我们可以快速使用Shell脚本文件夹创建和文件模板下载总结脚手架可以在终端快速执行,可以在package.json配置文件中添加相关字段。脚手架需要能够读取相关的终端输入,可以使用commander库进行快速开发。脚手架需要能够执行Shell脚本,可以使用node-cmd库快速实现需求。