国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用ShellJS提升你的開(kāi)發(fā)效率(一)

anRui / 2828人閱讀

摘要:返回堆棧中的路徑數(shù)組。如果沒(méi)有給出參數(shù),將從堆棧中刪除頂級(jí)目錄并執(zhí)行到新的頂級(jí)目錄。

Shelljs - Unix shell commands for Node.js

Shelljs是Node.js下的腳本語(yǔ)言解析器,具有豐富且強(qiáng)大的底層操作(Windows/Linux/OS X)權(quán)限。Shelljs本質(zhì)就是基于node的一層命令封裝插件,讓前端開(kāi)發(fā)者可以不依賴linux也不依賴類似于cmder的轉(zhuǎn)換工具,而是直接在我們最熟悉不過(guò)的javascript代碼中編寫(xiě)shell命令實(shí)現(xiàn)功能。

解決問(wèn)題

shell腳本對(duì)于前端都不陌生,在package.json配置里大家已經(jīng)使用了,以"build": "umi build && node zip.config.js"為例,npm run build先會(huì)執(zhí)行umi build后會(huì)執(zhí)行zip.config.js的腳本,zip.config.js腳本做的事就是if無(wú)build文件夾,則生成build文件夾并借助easyzip進(jìn)行壓縮打包,else存在build文件夾,則生成zip壓縮包或者其他公司需要的文件。
shelljs做的事就是自動(dòng)化,從耗時(shí)的重復(fù)性常規(guī)動(dòng)作里解放出來(lái),提升開(kāi)發(fā)效率和工作心情。

基本語(yǔ)法

//引入shelljs var shell = require("shelljs") //檢查控制臺(tái)是否以運(yùn)行`git `開(kāi)頭的命令 if (!shell.which("git")) { //在控制臺(tái)輸出內(nèi)容 shell.echo("Sorry, this script requires git"); shell.exit(1); } shell.rm("-rf","out/Release");//強(qiáng)制遞歸刪除`out/Release目錄` shell.cp("-R","stuff/","out/Release");//將`stuff/`中所有內(nèi)容拷貝至`out/Release`目錄 shell.cd("lib");//進(jìn)入`lib`目錄 //找出所有的擴(kuò)展名為js的文件,并遍歷進(jìn)行操作 shell.ls("*.js").forEach(function (file) { /* 這是第一個(gè)難點(diǎn):sed流編輯器,建議專題學(xué)習(xí),-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`中的內(nèi)容 shell.sed("-i", /.*REPLACE_LINE_WITH_MACRO.* /, shell.cat("macro.js"), file); }); //返回上一級(jí)目錄 shell.cd(".."); //run external tool synchronously //即同步運(yùn)行外部工具 if (shell.exec("git commit -am "Auto-commit"").code !== 0){ shell.echo("Error: Git commit failed"); shell.exit(1); }

示例解釋

shell.which(command)

在環(huán)境變量PATH中尋找指定命令的地址,判斷該命令是否可執(zhí)行,返回該命令的絕對(duì)地址

echo

在控制臺(tái)輸出指定內(nèi)容
.to(index.txt)寫(xiě)入文件

exit(code)
以退出碼為code退出當(dāng)前進(jìn)程

rm([options,] file [,file ...])

刪除一個(gè)目錄中一個(gè)或多個(gè)文件或目錄,一旦刪除,無(wú)法恢復(fù)。

常用參數(shù):

    -f:強(qiáng)制刪除文件;

    -i:刪除之前先詢問(wèn)用戶;

    -r:遞歸處理目錄;

    -v:顯示處理過(guò)程;

shell.rm("-rf", staticSplash);

cp([options,] source_array, dest) cp("-R","index.txt", "~/newCopy/") cp("-R",["index.txt", "old.txt"], "~/newCopy/")

用來(lái)將一個(gè)或多個(gè)源文件或目錄復(fù)制到指定的文件或目錄。

常用參數(shù):

    -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

切換工作目錄至指定的相對(duì)路徑或絕對(duì)路徑。cd..為返回上一級(jí),cd-回到前一目錄。

ls

用來(lái)顯示目標(biāo)列表。

常用參數(shù):

    -a:顯示所有文件;

    -C:多列顯示查詢結(jié)果;

    -l:單列長(zhǎng)格式顯示查詢結(jié)果(與-C相反);

    -R:遞歸處理目錄;

    -A:所有文件(包括開(kāi)頭的文件.,除了.和..)

    -d:列出目錄本身,而不是其內(nèi)容

ls(path.join("bundle", "css/")).forEach(cssName => { *** })

sed([options,] search_regex, replacement, file_array

將file_array中符合search_regex的內(nèi)容替換為replacement,支持正則的捕獲組自引用。一次處理一行內(nèi)容,處理完成后把緩沖區(qū)內(nèi)容送往屏幕,然后處理下一行,循環(huán)直至結(jié)束。

常用參數(shù):

    -i:直接作用源文件

cat([options,] file [, file ...])

將一個(gè)或多個(gè)文件內(nèi)容讀入,指定一個(gè)文件時(shí)讀入該文件,指定多個(gè)文件時(shí)將內(nèi)容連接在一起讀入。

可用選項(xiàng):
-n: number all output lines

exec(command [, options] [, callback])

執(zhí)行所傳入的命令

    async:是否異步執(zhí)行,默認(rèn)false,傳入callback時(shí)自動(dòng)開(kāi)啟

    slient:不輸出信息到console,默認(rèn)false

    encoding:默認(rèn)utf8

    除非另有說(shuō)明,否則command 同步執(zhí)行給定的給定。在同步 模式下,它返回一個(gè)ShellString(與ShellJS v0.6.x兼容,返回 表單的對(duì)象{ code:..., stdout:... , stderr:... })。否則,這將返回子進(jìn)程 對(duì)象,并callback獲取參數(shù)(code, stdout, stderr)。
    注意:對(duì)于長(zhǎng)期存在的進(jìn)程,最好以exec()異步方式運(yùn)行

chmod

設(shè)置文件調(diào)用權(quán)限

    -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表示所有
+表示增加權(quán)限,-表示取消權(quán)限,=表示唯一設(shè)定權(quán)限
r表示可讀,w表示可寫(xiě),x表示可執(zhí)行,X表示當(dāng)該文件是個(gè)子目錄

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"])

可用選項(xiàng)
-n:在向堆棧添加目錄時(shí)禁止正常更改目錄,以便僅操作堆棧

參數(shù)

    dir:使當(dāng)前工作目錄成為堆棧的頂部,然后執(zhí)行等效的cd dir

    +N:通過(guò)旋轉(zhuǎn)堆棧將第N個(gè)目錄(從dirs打印的列表的左側(cè)開(kāi)始,從零開(kāi)始)到列表的頂部

    -N:通過(guò)旋轉(zhuǎn)堆棧將第N個(gè)目錄(從dirs打印的列表右側(cè)開(kāi)始,從零開(kāi)始計(jì)數(shù))到列表頂部

echo(process.cwd()); // 當(dāng)前文件父路徑 /Users... pushd("/etc") // /private/etc /Users... pushd("+1") // users... /private/etc

將當(dāng)前目錄保存在目錄堆棧的頂部,然后cd到dir。沒(méi)有參數(shù),pushd交換前兩個(gè)目錄。返回堆棧中的路徑數(shù)組。

popd([options,] [" - N"|"+ N"])

可用選項(xiàng):
-n:從堆棧中刪除目錄時(shí)禁止正常更改目錄,以便僅操作堆棧

參數(shù):

    +N:刪除第N個(gè)目錄(從dirs打印的列表左側(cè)開(kāi)始計(jì)算),從零開(kāi)始

    -N:刪除第N個(gè)目錄(從dirs打印的列表右側(cè)開(kāi)始計(jì)算),從零開(kāi)始。

echo(process.cwd()); // "/usr" pushd("/etc"); // "/etc /usr" echo(process.cwd()); // "/etc" popd(); // "/usr" echo(process.cwd()); // "/usr"

如果沒(méi)有給出參數(shù),popd將從堆棧中刪除頂級(jí)目錄并執(zhí)行cd到新的頂級(jí)目錄。從dirs列出的第一個(gè)目錄開(kāi)始,元素從0開(kāi)始編號(hào); 即,popd相當(dāng)于popd +0。返回堆棧中的路徑數(shù)組

dirs([options |"+ N"|"-N"]

可用選項(xiàng):
-c:通過(guò)刪除所有元素清除目錄堆棧

參數(shù):

    +N:顯示第N個(gè)目錄(從沒(méi)有選項(xiàng)調(diào)用時(shí)由dirs打印的列表左側(cè)開(kāi)始計(jì)數(shù)),從零開(kāi)始

    -N:顯示第N個(gè)目錄(從沒(méi)有選項(xiàng)調(diào)用時(shí)由dirs打印的列表右側(cè)開(kāi)始計(jì)數(shù)),從零開(kāi)始

顯示當(dāng)前記住的目錄列表。返回堆棧中的路徑數(shù)組,如果指定了+ N或-N,則返回單個(gè)路徑。

find(path [,path ...])

查找文件

console.log(find("../Config/application.js"))

返回path_array

grep([options,] regex_filter,file [,file ...])

不同于fing查找文件,grep用于查找內(nèi)容

可用選項(xiàng):

    -v:反轉(zhuǎn)正則表達(dá)式的意義并打印不符合條件的行

    -l:僅打印匹配文件的文件名

grep("-v", "GLOBAL_VARIABLE", "*.js"); grep("GLOBAL_VARIABLE", "*.js");

從給定文件中讀取輸入字符串,并返回一個(gè)字符串,其中包含 與給定文件匹配的文件的所有行regex_filter

head([{" - n":},] file [,file ...])

讀取文件的開(kāi)頭

可用選項(xiàng):
-n :顯示文件的第一行

console.log(head("bundle.js")) console.log(head({"-n":1},"bundle.js")) // 獲取第一行

tail([{" - n":},] file [,file ...])

讀取文件的結(jié)尾

可用選項(xiàng): -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)

創(chuàng)建鏈接

ln("file", "newlink"); // /Users.../newlink ln("-sf", "file", "newlink"); //如果newlink存在,則強(qiáng)制鏈接

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/6705.html

相關(guān)文章

  • shelljs實(shí)現(xiàn)前端部署自動(dòng)化

    摘要:一場(chǎng)景在前端開(kāi)發(fā)過(guò)程中,你肯定經(jīng)常使用到以下等命令本人在用寫(xiě)我的個(gè)人博客時(shí),將其部署到上。每一次部署,都要將上面的命令敲一遍,實(shí)在令我很痛苦。安裝有兩種使用方式,一種是全局模式對(duì)應(yīng)全局安裝一種是局部模式。 一、場(chǎng)景 在前端開(kāi)發(fā)過(guò)程中,你肯定經(jīng)常使用到以下等命令: npm run build git add . git commit -m commit git push 本人在用vue...

    lemanli 評(píng)論0 收藏0
  • Nodejs開(kāi)發(fā)簡(jiǎn)單的腳手架工具

    摘要:本文主要是介紹開(kāi)發(fā)一個(gè)簡(jiǎn)單的腳手架,了解開(kāi)發(fā)的基本流程最終通過(guò)鏈接到全局包。完成之后,就可以把腳手架發(fā)布到上面,通過(guò)進(jìn)行全局安裝,就可以在自己本機(jī)上執(zhí)行來(lái)初始化項(xiàng)目,這樣便完成了一個(gè)簡(jiǎn)單的腳手架工具了。 腳手架,這個(gè)名詞對(duì)于作為前端的我們來(lái)說(shuō),也許并不陌生吧,像vue-cli,react-native-cli等,全局安裝后,只需要在命令行中敲入一個(gè)簡(jiǎn)單的命令,便可幫我們快速的生成一個(gè)初...

    sean 評(píng)論0 收藏0
  • 如何用node開(kāi)發(fā)自己的cli工具

    摘要:新建文件夾這是一個(gè)規(guī)范,可執(zhí)行工具的老家。然后輸入接下來(lái)會(huì)以問(wèn)答的形式向你了解你的用戶名密碼以及公開(kāi)的郵箱,之后輸入注意發(fā)布的源別是淘寶源,否則哦然后看到進(jìn)度條走,之后組件發(fā)布成功,可以到上搜索自己的包了。 如何用node開(kāi)發(fā)自己的cli工具 靈感 寫(xiě)這個(gè)工具的靈感以及場(chǎng)景源于youtube的一次閑聊 github 地址 blog首發(fā) showImg(https://segment...

    pkwenda 評(píng)論0 收藏0
  • 如何用node開(kāi)發(fā)自己的cli工具

    摘要:新建文件夾這是一個(gè)規(guī)范,可執(zhí)行工具的老家。然后輸入接下來(lái)會(huì)以問(wèn)答的形式向你了解你的用戶名密碼以及公開(kāi)的郵箱,之后輸入注意發(fā)布的源別是淘寶源,否則哦然后看到進(jìn)度條走,之后組件發(fā)布成功,可以到上搜索自己的包了。 如何用node開(kāi)發(fā)自己的cli工具 靈感 寫(xiě)這個(gè)工具的靈感以及場(chǎng)景源于youtube的一次閑聊 github 地址 blog首發(fā) showImg(https://segment...

    Bmob 評(píng)論0 收藏0
  • 如何用node開(kāi)發(fā)自己的cli工具

    摘要:新建文件夾這是一個(gè)規(guī)范,可執(zhí)行工具的老家。然后輸入接下來(lái)會(huì)以問(wèn)答的形式向你了解你的用戶名密碼以及公開(kāi)的郵箱,之后輸入注意發(fā)布的源別是淘寶源,否則哦然后看到進(jìn)度條走,之后組件發(fā)布成功,可以到上搜索自己的包了。 如何用node開(kāi)發(fā)自己的cli工具 靈感 寫(xiě)這個(gè)工具的靈感以及場(chǎng)景源于youtube的一次閑聊 github 地址 blog首發(fā) showImg(https://segment...

    Raaabbit 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<