工作中接到新项目,开发前都需要先规划项目目录,然后一个个创建文件,搭建sass编译环境,下载jquery,Swiper等类库... 这些准备工作都要花上不少时间。每做一个项目,都会遇到同样的问题,再重复一遍吗? 是时候做点改变了:编写自己的cli工具,一行命令,3秒钟进入coding状态!@H_403_1@
本文以自己的my-cli为例,将开发到发布过程完整记录下来,看完本文,你将学会如何从零开发一个cli项目,如何上传到github库,以及如何使用npm发布自己的包。@H_403_1@
准备
@H_403_1@开发一个cli工具前首先要想好它能做什么。以我自己为例,我需要一个工具,让我能只输入一行命令就帮我快速搭建好项目结构,就像这样:@H_403_1@
是不是很炫酷?放心,很简单。@H_403_1@
开始@H_403_1@
首先创建你的cli项目,并使用npm init创建一个package.json。@H_403_1@
根据提示一步步创建好package.json。name属性就是你发布到npm上的名字,这个是不能与npm上现有项目重名的,一个小技巧是使用npm install下载你想要起的包名字,如果报错404,那么你的包名是可用的。最后创建好的package.json文件像这样子:@H_403_1@
编写可执行文件
@H_403_1@package.json中有一个"bin"字段,配置后才可以在控制台使用你的命令。@H_403_1@
我们配置了"my-cli"命令来执行index.js文件。用你喜欢的编辑器,在项目主目录下创建一个index.js文件。 @H_403_1@
注意第一行的"#! node"很重要,表示用node来执行这个文件。如果没有这句声明,就会在记事本中打开index.js文件。@H_403_1@
全局安装你的包
@H_403_1@使用 npm install -g 将你当前的项目安装到全局环境,现在你可以在命令行使用"my-cli"命令了。 @H_403_1@
用fs模块快速生成项目模板
@H_403_1@我们自定义的指令可以执行了,接下来编写代码实现功能。my-cli的主要功能就是生成项目模板,一个思路是用一个templates文件夹保存项目模板,然后通过fs.mkdir()来创建项目目录,最后把文件从templates文件夹拷贝到项目中去。@H_403_1@
from = path.join(__dirname,'templates',from);
write(to,fs.readFileSync(from,'utf-8'))
}
function write (path,str,mode) {
fs.writeFileSync(path,str)
}
function mkdir (path,fn) {
fs.mkdir(path,function (err) {
fn && fn()
})
}
整个项目文件结构差不多就这个样子,把你需要的文件放到templates文件夹,然后用copyTemplate方法将文件拷贝到项目目录下。 @H_403_1@
创建文件目录和拷贝文件的过程,代码看着比较丑陋 @H_403_1@
接收命令行参数
@H_403_1@平常我们使用命令行工具时都会用到参数,如 webpack -p,express -e 等,现在我们来为自己的cli添加接收命令行参数的功能。为my-cli设计四个参数,用来向项目中添加类库。@H_403_1@
使用commander包可以简化解析参数过程,但是本项目比较简单,我也不想额外引入其他的包了,处理一些简单的参数其实并不难。 @H_403_1@
node中我们可以使用process.argv来获取命令行参数,process.argv是一个参数数组,第一项为node.exe的绝对路径,第二项为执行该js的绝对路径,使用process.argv.slice(2)即可获取输入的参数数组。@H_403_1@
通过遍历参数数组来检查命令中输入了哪些参数。如果输入了预设的参数,就为config对象添加对应的属性,在生成文件时根据onfig判断是否将模板文件拷贝到项目中。继续丑陋的代码:@H_403_1@
本地运行
@H_403_1@至此我们的项目已经基本完成了,使用 npm install -g 将项目安装到全局环境,然后新建一个项目文件夹,使用my-cli命令来生成项目模板。 @H_403_1@
发布到npm仓库
@H_403_1@要想将自己的包发布到npm上,首先得有一个npm账号,创建账号非常简单,输入npm adduser,简单三步即可完成创建。 @H_403_1@
创建好user后,使用npm publish即可将当前项目发布到npm上了,以后就可以使用npm install -g my-cli 来安装你的cli工具。 @H_403_1@
结束语
@H_403_1@相信大家看完本文后知道如何根据自己的需求制作cli工具了。本文中的my-cli比较简单,权当做抛砖引玉。如果想查看完整源码或者使用这个工具,可以戳这里:github地址。@H_403_1@
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。@H_403_1@ 原文链接:https://www.f2er.com/nodejs/39103.html