Node.js .sh scripts Manager

操刀鬼
• 阅读 4788

命令行也有苦恼

不知身为前端er的你是不是还在使用 Windows 开发?反正我是。使用 Git?使用 npm scripts?好吧,命令行是少不了的吧?想必很多同学和我一样,使用 Git Bash 作为命令行终端吧。

可是每次都要敲,累不累?想想一次简单的 Git 提交需要几个步骤?

$ git add -A
$ git commit -m 'commit'
$ git push

图简便的你可能会在 package.json 中这样配置:

{
    // ...
    "scripts": {
       // ...
       "push": "git add -A && git commit -m 'commit' && git push"
    }
}
// ...

然后再敲 npm run push。啊啊心好累。

用过 browser-sync cli 吗?反正为了图简便,我是经常用的。敲过最变态的是下面这一行:


browser-sync start --server --files "dist/*" --index "dist/index.html" --open "external" --reload-debounce --no-notify

.bat/.sh 的故事

敲过一次之后,发誓再也不这么玩了。索性在桌面保存了一个 bs.bat 文件,把上面的内容放进去。每次都从桌面 copy 到工作目录中去,双击完事。

后来玩 github 稍微勤了一些,commit、pull 的时候,命令行敲起来固然爽得不行,可是累啊。在上一家公司做 react-native 应用的时候,对 react-native run start cd android && ./gradlew assembleRelease 也是深恶痛绝。最后无不以 bat、sh文件收尾。

nshm 的由来

前些时间接触到一个管理 npm registry 的 package,叫 nrm,用起来真是爽。nrm use taobao nrm add xx url简单就能解决问题。这让我萌生一个想法:能不能不要每次都从桌面 copy 那些简单的脚本啊,来个简单的命令行自己把文件写目录不就 OK 了吗?

酝酿了一段时间。迟迟不肯动手。今天中午下楼抽烟,灵机一动,思路来了,花了半下午时间,边写边重构,最终做出来一个略嫌简陋但还能凑合用的工具,名之曰 “nshm”,取 “Node.js .sh scripts Manager” 的缩写,放在 Github 上了,https://github.com/AngusFu/nshm

使用起来很简单,看文档就行。

安装

$ npm install nshm -g

$ nshm <command> [args...]

添加一条自定义命令

$ nshm add <command_name> -[t|f] [text|path]

# add file content
$ nshm add commit --file ./my-commit.sh
# or
$ nshm add commit -f ./my-commit.sh

# add text content
$ nshm add pull --text "git pull"
# or
$ nshm add pull -t "git pull"

多个命令合并成一条命令

$ nshm co <command_name> [command|text] [command|text] [command|text] [...]

$ nshm co git commit pull "git status"

删除缓存的命令

$ nshm rm <command_name> <command_name> <...> 

$ nshm rm commit pull git

清除所有缓存的命令

$ nshm clean

列出现有的命令

# view all names
$ nshm ls

# view all details
$ nshm ls -a

Example 01

$ nshm add add -t "git add -A"
$ nshm add commit -t "git commit -m 'push'"
$ nshm add pull -t "git push"

$ nshm co git add commit pull

# init my directory
# then we'll get `add.sh` `commit.sh` `pull.sh`
$ nshm git 

Example 02

# browserSync cli 
# here we use `${}` as placeholders
# for necessary params
$ nshm add bs -t "browser-sync start --server --files \"${files}\" --index \"${index}\" --open \"external\" --reload-debounce --no-notify"

# now we get the `bs.sh` file under our working directory
$ nshm bs --file '**' --index 'index.html'

结尾

工具默认自带了 Git 相关的 commit pull 及集成两者的 git 命令,还有上面提到的 browser-sync 的命令(简称作bs)。也可以使用 nshm add 的形式自己添加。

微不足道的工具,自娱自乐一下,虽然显得 low 了点,也能解决自己的一点问题。

That's all。

PS: 今晚开始看 WebRTC 的内容,小有收获,学习笔记会放在 https://github.com/AngusFu/webRTC-demo 这里,不是对书上 demo 的简单重复,而是按照自己的理解来记录。学习的生活捡起来!

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
4年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
4年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Easter79 Easter79
4年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
4年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
4年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
4年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。