全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解用node编写自己的cli工具

工作中接到新项目,开发前都需要先规划项目目录,然后一个个创建文件,搭建sass编译环境,下载jquery,Swiper等类库... 这些准备工作都要花上不少时间。每做一个项目,都会遇到同样的问题,再重复一遍吗?
是时候做点改变了:编写自己的cli工具,一行命令,3秒钟进入coding状态!

本文以自己的my-cli为例,将开发到发布过程完整记录下来,看完本文,你将学会如何从零开发一个cli项目,如何上传到github库,以及如何使用npm发布自己的包。

准备

开发一个cli工具前首先要想好它能做什么。以我自己为例,我需要一个工具,让我能只输入一行命令就帮我快速搭建好项目结构,就像这样:


是不是很炫酷?放心,很简单。

开始

首先创建你的cli项目,并使用npm init创建一个package.json。

$ mkdir my-cli && cd my-cli
$ npm init

根据提示一步步创建好package.json。name属性就是你发布到npm上的名字,这个是不能与npm上现有项目重名的,一个小技巧是使用npm install下载你想要起的包名字,如果报错404,那么你的包名是可用的。最后创建好的package.json文件像这样子:

{
 "name": "my-cli",
 "version": "0.0.1",
 "description": "Auto generate project template",
 "main": "index.js",
 "bin": {
  "my-cli": "./index.js"
 },
 "repository": {
  "type": "git",
  "url": "git+https://github.com/hlme/my-cli.git"
 },
 "keywords": [
  "cli"
 ],
 "author": "798400626@qq.com",
 "license": "MIT",
 "bugs": {
  "url": "https://github.com/hlme/my-cli/issues"
 },
 "homepage": "https://github.com/hlme/my-cli#readme"
}

编写可执行文件

package.json中有一个"bin"字段,配置后才可以在控制台使用你的命令。

"bin": {
 "my-cli": "./index.js"
}

我们配置了"my-cli"命令来执行index.js文件。用你喜欢的编辑器,在项目主目录下创建一个index.js文件。


注意第一行的"#! node"很重要,表示用node来执行这个文件。如果没有这句声明,就会在记事本中打开index.js文件。

全局安装你的包

使用 npm install -g 将你当前的项目安装到全局环境,现在你可以在命令行使用"my-cli"命令了。

用fs模块快速生成项目模板

我们自定义的指令可以执行了,接下来编写代码实现功能。my-cli的主要功能就是生成项目模板,一个思路是用一个templates文件夹保存项目模板,然后通过fs.mkdir()来创建项目目录,最后把文件从templates文件夹拷贝到项目中去。

var fs = require('fs');
var path = require('path');

function copyTemplate (from, to) {
 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方法将文件拷贝到项目目录下。

创建文件目录和拷贝文件的过程,代码看着比较丑陋

接收命令行参数

平常我们使用命令行工具时都会用到参数,如 webpack -p, express -e 等,现在我们来为自己的cli添加接收命令行参数的功能。为my-cli设计四个参数,用来向项目中添加类库。

$ my-cli -j -s -v -b
//-j :添加jQuery
//-s :添加Swiper
//-v :添加Vue
//-b :添加Bootstrap

使用commander包可以简化解析参数过程,但是本项目比较简单,我也不想额外引入其他的包了,处理一些简单的参数其实并不难。

node中我们可以使用process.argv来获取命令行参数,process.argv是一个参数数组,第一项为node.exe的绝对路径,第二项为执行该js的绝对路径,使用process.argv.slice(2)即可获取输入的参数数组。


通过遍历参数数组来检查命令中输入了哪些参数。如果输入了预设的参数,就为config对象添加对应的属性,在生成文件时根据onfig判断是否将模板文件拷贝到项目中。继续丑陋的代码:


本地运行

至此我们的项目已经基本完成了,使用 npm install -g 将项目安装到全局环境,然后新建一个项目文件夹,使用my-cli命令来生成项目模板。

发布到npm仓库

要想将自己的包发布到npm上,首先得有一个npm账号,创建账号非常简单,输入npm adduser,简单三步即可完成创建。


创建好user后,使用npm publish即可将当前项目发布到npm上了,以后就可以使用npm install -g my-cli 来安装你的cli工具。

结束语

相信大家看完本文后知道如何根据自己的需求制作cli工具了。本文中的my-cli比较简单,权当做抛砖引玉。如果想查看完整源码或者使用这个工具,可以戳这里:github地址。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# node.js编写cli的实践  # node  # cli  # nodejs  # 浅谈node.js 命令行工具(cli)  # node通过npm写一个cli命令行工具  # 详解如何使用Node.js编写命令工具——以vue-cli为例  # 用node开发并发布一个cli工具的方法步骤  # 自己的  # 命令行  # 要想  # 看完  # 为例  # 创建一个  # 拷贝到  # 是一个  # 类库  # 看着  # 就像  # 你可以  # 都要  # 上了  # 做什么  # 帮我  # 遍历  # 中有  # 其他的  # 不是很 


相关文章: 如何正确下载安装西数主机建站助手?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  Swift中switch语句区间和元组模式匹配  宝塔新建站点报错如何解决?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  如何在云主机上快速搭建多站点网站?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  建站之星好吗?新手能否轻松上手建站?  名字制作网站免费,所有小说网站的名字?  如何破解联通资金短缺导致的基站建设难题?  如何用PHP工具快速搭建高效网站?  如何通过云梦建站系统实现SEO快速优化?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  建站之星多图banner生成与模板自定义指南  如何在阿里云ECS服务器部署织梦CMS网站?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  重庆市网站制作公司,重庆招聘网站哪个好?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  网站企业制作流程,用什么语言做企业网站比较好?  如何通过商城自助建站源码实现零基础高效建站?  宝塔建站助手安装配置与建站模板使用全流程解析  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  如何在新浪SAE免费搭建个人博客?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  南平网站制作公司,2025年南平市事业单位报名时间?  临沂网站制作企业,临沂第三中学官方网站?  制作网站公司那家好,网络公司是做什么的?  如何自定义建站之星网站的导航菜单样式?  如何通过网站建站时间优化SEO与用户体验?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  PHP 500报错的快速解决方法  活动邀请函制作网站有哪些,活动邀请函文案?  建站主机是什么?如何选择适合的建站主机?  jQuery 常见小例汇总  如何通过虚拟主机快速搭建个人网站?  教学网站制作软件,学习*后期制作的网站有哪些?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  如何配置IIS站点权限与局域网访问?  建站主机服务器选购指南:轻量应用与VPS配置解析  如何用VPS主机快速搭建个人网站?  如何用wdcp快速搭建高效网站?  网站制作员失业,怎样查看自己网站的注册者?  javascript中对象的定义、使用以及对象和原型链操作小结  微信小程序 input输入框控件详解及实例(多种示例)  Python路径拼接规范_跨平台处理说明【指导】  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。