摘要:返回堆棧中的路徑數組。如果沒有給出參數,將從堆棧中刪除頂級目錄并執行到新的頂級目錄。
Shelljs - Unix shell commands for Node.js
Shelljs是Node.js下的腳本語言解析器,具有豐富且強大的底層操作(Windows/Linux/OS X)權限。Shelljs本質就是基于node的一層命令封裝插件,讓前端開發者可以不依賴linux也不依賴類似于cmder的轉換工具,而是直接在我們最熟悉不過的javascript代碼中編寫shell命令實現功能。
解決問題
shell腳本對于前端都不陌生,在package.json配置里大家已經使用了,以"build": "umi build && node zip.config.js"為例,npm run build先會執行umi build后會執行zip.config.js的腳本,zip.config.js腳本做的事就是if無build文件夾,則生成build文件夾并借助easyzip進行壓縮打包,else存在build文件夾,則生成zip壓縮包或者其他公司需要的文件。
shelljs做的事就是自動化,從耗時的重復性常規動作里解放出來,提升開發效率和工作心情。
基本語法
//引入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.* /, 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)
在環境變量PATH中尋找指定命令的地址,判斷該命令是否可執行,返回該命令的絕對地址
echo
在控制臺輸出指定內容
.to(index.txt)寫入文件
exit(code)
以退出碼為code退出當前進程
rm([options,] file [,file ...])
刪除一個目錄中一個或多個文件或目錄,一旦刪除,無法恢復。
常用參數:
-f:強制刪除文件;
-i:刪除之前先詢問用戶;
-r:遞歸處理目錄;
-v:顯示處理過程;
shell.rm("-rf", staticSplash);
cp([options,] source_array, dest) cp("-R","index.txt", "~/newCopy/") cp("-R",["index.txt", "old.txt"], "~/newCopy/")
用來將一個或多個源文件或目錄復制到指定的文件或目錄。
常用參數:
-f:force (default behavior)
-L: follow symlinks
-r,-R: recursive
-n: no-clobber
-u: only copy if source is newer than dest
-P: don"t follow symlinks
cd
切換工作目錄至指定的相對路徑或絕對路徑。cd..為返回上一級,cd-回到前一目錄。
ls
用來顯示目標列表。
常用參數:
-a:顯示所有文件;
-C:多列顯示查詢結果;
-l:單列長格式顯示查詢結果(與-C相反);
-R:遞歸處理目錄;
-A:所有文件(包括開頭的文件.,除了.和..)
-d:列出目錄本身,而不是其內容
ls(path.join("bundle", "css/")).forEach(cssName => { *** })
sed([options,] search_regex, replacement, file_array
將file_array中符合search_regex的內容替換為replacement,支持正則的捕獲組自引用。一次處理一行內容,處理完成后把緩沖區內容送往屏幕,然后處理下一行,循環直至結束。
常用參數:
-i:直接作用源文件
cat([options,] file [, file ...])
將一個或多個文件內容讀入,指定一個文件時讀入該文件,指定多個文件時將內容連接在一起讀入。
可用選項:
-n: number all output lines
exec(command [, options] [, callback])
執行所傳入的命令
async:是否異步執行,默認false,傳入callback時自動開啟
slient:不輸出信息到console,默認false
encoding:默認utf8
除非另有說明,否則command 同步執行給定的給定。在同步
模式下,它返回一個ShellString(與ShellJS v0.6.x兼容,返回
表單的對象{ code:..., stdout:... , stderr:... })。否則,這將返回子進程
對象,并callback獲取參數(code, stdout, stderr)。
注意:對于長期存在的進程,最好以exec()異步方式運行
chmod
設置文件調用權限
-c:output a diagnostic for every file processed
-v: like verbose, but report only when a change is made
-R: change files and directories recursively
u表示該文件擁有者,g表示同一群體者,o表示其他,a表示所有
+表示增加權限,-表示取消權限,=表示唯一設定權限
r表示可讀,w表示可寫,x表示可執行,X表示當該文件是個子目錄
chmod(755, "/Users/brandon"); chmod("755", "/Users/brandon"); // same as above chmod("u+x", "/Users/brandon"); chmod("-R", "a-w", "/Users/brandon");
pushd([options,] [dir |"-N"|"+ N"])
可用選項
-n:在向堆棧添加目錄時禁止正常更改目錄,以便僅操作堆棧
參數
dir:使當前工作目錄成為堆棧的頂部,然后執行等效的cd dir
+N:通過旋轉堆棧將第N個目錄(從dirs打印的列表的左側開始,從零開始)到列表的頂部
-N:通過旋轉堆棧將第N個目錄(從dirs打印的列表右側開始,從零開始計數)到列表頂部
echo(process.cwd()); // 當前文件父路徑 /Users... pushd("/etc") // /private/etc /Users... pushd("+1") // users... /private/etc
將當前目錄保存在目錄堆棧的頂部,然后cd到dir。沒有參數,pushd交換前兩個目錄。返回堆棧中的路徑數組。
popd([options,] [" - N"|"+ N"])
可用選項:
-n:從堆棧中刪除目錄時禁止正常更改目錄,以便僅操作堆棧
參數:
+N:刪除第N個目錄(從dirs打印的列表左側開始計算),從零開始
-N:刪除第N個目錄(從dirs打印的列表右側開始計算),從零開始。
echo(process.cwd()); // "/usr" pushd("/etc"); // "/etc /usr" echo(process.cwd()); // "/etc" popd(); // "/usr" echo(process.cwd()); // "/usr"
如果沒有給出參數,popd將從堆棧中刪除頂級目錄并執行cd到新的頂級目錄。從dirs列出的第一個目錄開始,元素從0開始編號; 即,popd相當于popd +0。返回堆棧中的路徑數組
dirs([options |"+ N"|"-N"]
可用選項:
-c:通過刪除所有元素清除目錄堆棧
參數:
+N:顯示第N個目錄(從沒有選項調用時由dirs打印的列表左側開始計數),從零開始
-N:顯示第N個目錄(從沒有選項調用時由dirs打印的列表右側開始計數),從零開始
顯示當前記住的目錄列表。返回堆棧中的路徑數組,如果指定了+ N或-N,則返回單個路徑。
find(path [,path ...])
查找文件
console.log(find("../Config/application.js"))
返回path_array
grep([options,] regex_filter,file [,file ...])
不同于fing查找文件,grep用于查找內容
可用選項:
-v:反轉正則表達式的意義并打印不符合條件的行
-l:僅打印匹配文件的文件名
grep("-v", "GLOBAL_VARIABLE", "*.js"); grep("GLOBAL_VARIABLE", "*.js");
從給定文件中讀取輸入字符串,并返回一個字符串,其中包含 與給定文件匹配的文件的所有行regex_filter
head([{" - n":},] file [,file ...])
讀取文件的開頭
可用選項:
-n :顯示文件的第一行
console.log(head("bundle.js")) console.log(head({"-n":1},"bundle.js")) // 獲取第一行
tail([{" - n":},] file [,file ...])
讀取文件的結尾
可用選項: -n :顯示文件的最后幾行
var str = tail({"-n": 1}, "file*.txt"); var str = tail("file1", "file2"); var str = tail(["file1", "file2"]); // same as above
ln([options,] source,dest)
創建鏈接
ln("file", "newlink"); // /Users.../newlink ln("-sf", "file", "newlink"); //如果newlink存在,則強制鏈接
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/6705.html
摘要:一場景在前端開發過程中,你肯定經常使用到以下等命令本人在用寫我的個人博客時,將其部署到上。每一次部署,都要將上面的命令敲一遍,實在令我很痛苦。安裝有兩種使用方式,一種是全局模式對應全局安裝一種是局部模式。 一、場景 在前端開發過程中,你肯定經常使用到以下等命令: npm run build git add . git commit -m commit git push 本人在用vue...
摘要:本文主要是介紹開發一個簡單的腳手架,了解開發的基本流程最終通過鏈接到全局包。完成之后,就可以把腳手架發布到上面,通過進行全局安裝,就可以在自己本機上執行來初始化項目,這樣便完成了一個簡單的腳手架工具了。 腳手架,這個名詞對于作為前端的我們來說,也許并不陌生吧,像vue-cli,react-native-cli等,全局安裝后,只需要在命令行中敲入一個簡單的命令,便可幫我們快速的生成一個初...
摘要:新建文件夾這是一個規范,可執行工具的老家。然后輸入接下來會以問答的形式向你了解你的用戶名密碼以及公開的郵箱,之后輸入注意發布的源別是淘寶源,否則哦然后看到進度條走,之后組件發布成功,可以到上搜索自己的包了。 如何用node開發自己的cli工具 靈感 寫這個工具的靈感以及場景源于youtube的一次閑聊 github 地址 blog首發 showImg(https://segment...
摘要:新建文件夾這是一個規范,可執行工具的老家。然后輸入接下來會以問答的形式向你了解你的用戶名密碼以及公開的郵箱,之后輸入注意發布的源別是淘寶源,否則哦然后看到進度條走,之后組件發布成功,可以到上搜索自己的包了。 如何用node開發自己的cli工具 靈感 寫這個工具的靈感以及場景源于youtube的一次閑聊 github 地址 blog首發 showImg(https://segment...
摘要:新建文件夾這是一個規范,可執行工具的老家。然后輸入接下來會以問答的形式向你了解你的用戶名密碼以及公開的郵箱,之后輸入注意發布的源別是淘寶源,否則哦然后看到進度條走,之后組件發布成功,可以到上搜索自己的包了。 如何用node開發自己的cli工具 靈感 寫這個工具的靈感以及場景源于youtube的一次閑聊 github 地址 blog首發 showImg(https://segment...
閱讀 1391·2019-08-30 12:54
閱讀 1877·2019-08-30 11:16
閱讀 1621·2019-08-30 10:50
閱讀 2454·2019-08-29 16:17
閱讀 1273·2019-08-26 12:17
閱讀 1385·2019-08-26 10:15
閱讀 2393·2019-08-23 18:38
閱讀 791·2019-08-23 17:50