手把手教你使用nodejs编写cli(命令行)

前端日常开发中,会遇见各种各样的cli,比如一行命令帮你打包的webpack,一行命令帮你生成vue项目模板的vue-cli,还有创建react项目的create-react-app等等等等。这些工具极大地方便了我们的日常工作,让计算机自己去干繁琐的工作,而我们,就可以节省出大量的时间用于学习、交流、开发、逛steam。

但是有时候一些十分特别的需求,我们是找不到适合的cli工具去做的。比如说,你的项目十分庞大,你给项目添加一个新的路由,要经过创建目录 -> 创建.vue文件 -> 更新vue-router的路由列表这一趟流程,就算快捷键创建目录文件用得再熟悉,也比不过你一行命令来得快,特别是路由目录嵌套深,.vue文件初始化模板复杂的时候。

所以呢,何不为自己项目写一个cli?就专门做这些繁琐的活?

0x1 hello world

nodejs的cli,本质就是跑node脚本嘛,基本上每位前端er都会:

// index.jsconsole.log('hello world')复制代码

然后命令行调用

> node index.js## 输出:> hello world复制代码

可以做得更逼真一点,我们在package.json里面的scripts字段上添加一下脚本名:

{ "scripts":{ "hello":"node index.js" }}复制代码

然后命令行调用:

> npm run hello复制代码

但是,看到这里你肯定会说,人家webpack还有vue-cli都是“有名字”的!什么vue-cli init app、webpack -p的,多漂亮,看看这个命令行,node index.js,还npm run hello,谁不会啊,丑不拉几的,怕又不是来水文章的哦?差评!!

别急啊各位大人,接下来就说说,如何给这个node脚本起个名字。

0x2 起名字

姑且,先把这个cli的名字命名为hello-cli,就是我们能够在命令行里面,输入hello-cli,然后它就打印一句hello world,没有node也没有npm,就是:

  1. 这里,我们需要做几步操作:index.js文件顶部声明执行环境:
// index.js#!/usr/bin/env nodeconsole.log('hello world')复制代码
  1. 添加#!/usr/bin/env node或者#!/usr/bin/node,这是告诉系统,下面这个脚本,使用nodejs来执行。当然,这个系统不包括windows,因为windows下有个JScript的历史遗留物在,会让你的脚本跑不起来。
  2. #!/usr/bin/env node的意思是让系统自己去找node的执行程序。
  3. #!/usr/bin/node的意思是,明确告诉系统,node的执行程序在路径为/usr/bin/node。
  4. 添加package.json的bin字段。
  5. 可以在index.js当前的目录下执行npm init创建一个package.json,然后在package.json里面,添加一个bin字段:
{ "name": "hello-test

add-apt-repository:找不到命令_手把手教你使用nodejs编写cli(命令行)相关推荐

  1. 手把手教你使用nodejs编写一个【使用远程仓库模板,快速创建项目模块】的cli(命令行)

    目录 实现步骤 初始化cli项目 项目目录 创建交互式命令 拉取远程仓库代码,读取仓库中的模板 拉取远程仓库代码 ora 终端 loading 读取仓库中的模板 将选择的模板复制写入目标项目 Comm ...

  2. vue代码生成器可视化界面_手把手教你基于SqlSugar4编写一个可视化代码生成器(生成实体,以SqlServer为例,文末附源码)...

    在开发过程中免不了创建实体类,字段少的表可以手动编写,但是字段多还用手动创建的话不免有些浪费时间,假如一张表有100多个字段,手写有些不现实. 这时我们会借助一些工具,如:动软代码生成器.各种ORM框 ...

  3. 软件_手把手教vscode配置c++,python开发环境

    原创:软件_手把手教vscode配置c++,python开发环境 之前主用Python作为项目开发语言,将项目迁移到arm边缘盒子上后发现arm的cpu不给力,软件速度低于预期,所以计划将部分程序改为 ...

  4. python 儿童 游戏_少儿编程分享:手把手教你用Python编写战斗机游戏(完)

    原标题:少儿编程分享:手把手教你用Python编写战斗机游戏(完) 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑 .接下来,我们要把单调的白色矩形换成好看的图片. 在前面的代码中,我们用 ...

  5. 用python画小兔子_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)

    原标题:少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一) 游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫 ...

  6. linux vim命令_提升生产力的20大Linux Vim命令

    linux vim命令 VIM or the Vi Improved text editor is one of the most advanced text editors available. L ...

  7. c#样条曲线命令_如何定制CAD功能区界面中的命令?

    在AUTOCAD 高版本中使用了RIBBON功能区界面,到了2015版以后舍弃了传统的菜单工具栏界面,只保留了RIBBON界面,但为了照顾一部分的习惯,可以选择打开菜单栏.不少人仍习惯旧版经典界面,因 ...

  8. 刷新mac地址命令_配置好Cisco交换机需要熟悉IOS命令及相关的知识

    一.几种配置命令模式 switch> 这种提示符表示是在用户命令模式,只能使用一些查看命令. switch# 这种提示符表示是在特权命令模式. switch(config)# 这种提示符表示是全 ...

  9. linux 上plsql命令_在 Linux 上压缩文件:zip 命令的各种变体及用法 | Linux 中国

    除了压缩和解压缩文件外,你还可以使用 zip 命令执行许多有趣的操作.这是一些其他的 zip 选项以及它们如何提供帮助.-- Sandra Henry-stocker 为了节省一些磁盘空间并将文件打包 ...

最新文章

  1. Machine Learning for Encrypted Malware Traffic Classification
  2. BZOJ-1854-[Scoi2010]游戏(并查集)
  3. c语言case后加3 5,10.程序流程控制:switch-case
  4. 炼丹秘术:给Embedding插上翅膀
  5. boost::core模块实现bit ceil测试
  6. java的使用Pair要导入什么包,第三方jar包的使用
  7. mb_internal_encoding php,PHP字符串mbstring处理中文字符串的具体方法解析
  8. 用c语言elgamal共密钥密码加密算法,非对称密钥体制RSA加密原理
  9. ppp协议 服务器,PPP上的认证协议
  10. Flutter动画Animation开发指南
  11. 贵州贵安新区试点大数据精准扶贫运营管理
  12. Linux下移动anaconda虚拟环境的位置
  13. Java 密码学算法
  14. 自制天平一架自制饮料
  15. nginx signal 之 quit
  16. python视频批量抽帧脚本更新
  17. 读《软技能》:自学提高生产力
  18. 高效办公——Excel表格-01篇(截取、分列、重组等简单操作)
  19. 工薪阶层如何用5年理出100W?绝对实用方法
  20. 20220320在MT6739的android10下调试GPIO引脚

热门文章

  1. JavaScript - JavaScript自定义弹出对话框
  2. SIP中的SDP offer/answer交换初探
  3. rfc8222045
  4. 该死的java String
  5. RESTful API 中的 Status code 是否要遵守规范
  6. 描述符应用 -- 让python变成一个强类型的语言
  7. NAT VRRP
  8. document 文挡对象 - JavaScript脚本语言描述
  9. 跨域问题解决方案--Nginx代理转发
  10. wxpython嵌套panel布局的一个问题