《一統江湖的大前端》系列是本身的前端學習筆記,旨在介紹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
均支持鏈式調用。
個人博客即將入駐「雲棲社區」,誠邀技術同仁一同入駐。