《一统江湖的大前端》系列是本身的前端学习笔记,旨在介绍javascript在非网页开发领域的应用案例和发现各种好玩的js库,不按期更新。若是你对前端的理解仍是写写页面绑绑事件,那你真的是有点OUT了,前端能作的事情已经太多了,
手机app开发
,桌面应用开发
,用于神经网络人工智能的库
,页面游戏
,数据可视化
, 甚至嵌入式开发
,什么火就搞什么,活脱脱一个蹭热点小能手。若是你也以为前端的平常开发有些枯燥,不妨一块儿来看看前端的另外一番模样。javascript
前端开发人员的工做内容几乎不多会涉及脚本的编写,建议将shell.js和git的命令行指令综合在一块儿做为专题学习,集中学习一下经常使用指令。更详细的参数请参考专门的shell脚本语言资料进行学习。前端
码农界存在着无数条鄙视链,linux
使用者对windows
的鄙视即是其中之一,cli
使用者对GUI
用户的嘲讽也是如此,在这样一个讲究逼格的时代,若是你的桌面上没有一个小黑窗时不时地从下往上翻滚并抛出一些亮绿色的字符串,你真很差意思跟人打招呼。而前端
这种天生几乎不用和命令行打交道的物种,天然再一次莫名其妙地处在了鄙视链的末端,没错,是再一次。java
Shell
是linux
下的脚本语言解析器,拥有丰富且强大的底层操做权限。Shelljs
就是基于node
的一层命令封装插件,让前端开发者能够不依赖linux
也不依赖相似于cmder
的转换工具,而是直接在咱们最熟悉不过的javascript
代码中编写shell
命令实现功能。node
shell
跟自动化
是强相关的,我的理解其用途主要是两方面:linux
shelljs
并非什么具备非凡意义的插件,它只是对node
的底层API进行了一些封装,方便咱们以相似shell
的语法去编写代码梳理逻辑,实现一些业务逻辑需求,若是你所在的项目组刚好须要这样的能力,用它会很方便;cli
相对于GUI
或许是更快,但它依然是一种重复劳做,有了shelljs和全栈能力,开发者能够将团队中耗时的重复性常规动做编写为自动化脚本,并利用前端的自然优点为其配备GUI
,用页面上的一键点击来替代重复劳做,在紧张的开发节奏中,平均天天为你节约个30-40分钟起来走走喝杯水难道很差吗?想要一统江湖,大前端的深度和广度是缺一不可的,你能够说你不精通shell,但不要说本身不懂shell,更不要一脸天真地反问面试官“前端还能搞shell?这么神奇?”他不会以为你对知识有好奇心,只会以为你很low,哦不对,是大写的LOW.git
废话说完了,开始学习,拿好小本子,我要开车了。面试
//引入shelljs var shell = require('shelljs') //检查控制台是否以运行`git `开头的命令 if (!shell.which('git')) { //在控制台输出内容 shell.echo('Sorry, this script requires git'); shell.exit(1); } shell.rm('-rf','out/Release');//强制递归删除`out/Release目录` shell.cp('-R','stuff/','out/Release');//将`stuff/`中全部内容拷贝至`out/Release`目录 shell.cd('lib');//进入`lib`目录 //找出全部的扩展名为js的文件,并遍历进行操做 shell.ls('*.js').forEach(function (file) { /* 这是第一个难点:sed流编辑器,建议专题学习,-i表示直接做用源文件 */ //将build_version字段替换为'v0.1.2' shell.sed('-i', 'BUILD_VERSION', 'v0.1.2', file); //将包含`REMOVE_THIS_LINE`字符串的行删除 shell.sed('-i', /^.*REMOVE_THIS_LINE.*$/, '', file); //将包含`REPLACE_LINE_WITH_MACRO`字符串的行替换为`macro.js`中的内容 shell.sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, shell.cat('macro.js'), file); }); //返回上一级目录 shell.cd('..'); //run external tool synchronously //即同步运行外部工具 if (shell.exec('git commit -am "Auto-commit"').code !== 0){ shell.echo('Error: Git commit failed'); shell.exit(1); }
shell.which(command)shell
在环境变量
PATH
中寻找指定命令的地址,判断该命令是否可执行,返回该命令的绝对地址。windows
echoapi
在控制台输出指定内容
exit(code)
以退出码为
code
退出当前进程
rm
删除一个目录中一个或多个文件或目录,一旦删除,没法恢复。
经常使用参数
:
cp([options,] source_array, dest)
用来将一个或多个源文件或目录复制到指定的文件或目录。
经常使用参数
:
cd
切换工做目录至指定的相对路径或绝对路径。
cd..
为返回上一级,cd-
回到前一目录。
ls
用来显示目标列表。
经常使用参数
:
sed([options,] search_regex, replacement, file_array
将
file_array
中符合search_regex
的内容替换为replacement
,支持正则的捕获组自引用。一次处理一行内容,处理完成后把缓冲区内容送往屏幕,而后处理下一行,循环直至结束。功能丰富且用法较复杂,建议自行百度进行专题学习。
cat
将一个或多个文件内容读入,指定一个文件时读入该文件,指定多个文件时将内容链接在一块儿读入。
exec(command,[, options][, callback])
执行所传入的命令
false
,传入callback时自动开启false
utf8
chmod
设置文件调用权限
find(path[,path...])
寻找路径
grep([options,] regex_filter,file)
从指定文件中抓取符合正则的行
head([{'-n':
显示指定文件中的前N行
<num>
行
mv
移动文件
pwd
返回当前目录
rm
见上文
set
设置全局变量的值
sort
将文件的内容逐行排序
tail
读取指定文件的末尾n行,对比
head
命令进行理解
test()
评估一个表达式是否为真(如下仅为最多见的参数用例)
true
true
ShellString()
构造器,将一个字符串转化为Shell字符串,转化后的字符串支持链式调用特殊的shell命令
ShellString.Prototype.to()
将
shellString
输出至指定文件,至关于脚本语言中的>
ShellString.Prototype.toEnd()
将
shellString
追加至指定文件,至关于脚本语言中的>>
touch([options,]file)
生成文件
env['VAR_NAME']
指向
process.env
Pipes链式调用支持
sed
,grep
,cat
,exec
,to
,toEnd
均支持链式调用。
个人博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。