精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

別再用 Bash 寫前端自動(dòng)化腳本了!

開發(fā) 前端
今年最受歡迎的項(xiàng)目是谷歌的 zx,可在 JavaScript 或 TypeScript 中編寫簡單的命令行腳本。

導(dǎo)讀

Vladimir[1] 發(fā)現(xiàn)自己一直討厭 bash 編寫的自動(dòng)化流程腳本,并且在機(jī)緣巧合下發(fā)現(xiàn)同事們都有類似的想法,因此他分享了他認(rèn)為 JavaScript 編寫自動(dòng)化腳本的優(yōu)勢,看看能不能說服大家去共建更好的生態(tài)。

與之相關(guān)的是,谷歌的 zx[2] 項(xiàng)目正是為此而生,并且在去年的 JavaScript 工具流行趨勢調(diào)查中獲得了第一名。

今年最受歡迎的項(xiàng)目是谷歌的 zx,可在 JavaScript 或 TypeScript 中編寫簡單的命令行腳本。

zx 支持在代碼中嵌入任何 bash 表達(dá)式(ls、cat、git 等等),并借助 JavaScript 模板字面量獲得結(jié)果。

zx 涵蓋了多個(gè)軟件包提供的功能:

node-fetch:使用與瀏覽器中相同的 API 發(fā)出 HTTP 請(qǐng)求;

fs-extra:運(yùn)行文件系統(tǒng)

Globby:匹配給定用戶友好模式的文件名

接下來是他所分享的一些看法:

我在日常的工作中也體會(huì)到,大家仿佛有共識(shí)一般默認(rèn)寫自動(dòng)化構(gòu)建腳本時(shí)要去用 bash,希望這篇文章可以帶給大伙一些不一樣的思考,也許 JavaScript 來寫會(huì)更好?

先看看幾個(gè)可能的優(yōu)點(diǎn):

  • 你的團(tuán)隊(duì)可能對(duì) JS 最熟悉
  • dev 和 CI 機(jī)器上很可能默認(rèn)安裝了 Node
  • 直接可以訪問其他 JS 工具
  • Node 是跨平臺(tái)的運(yùn)行時(shí)
  • 進(jìn)程間通信是異步的,而且相當(dāng)方便

如果你時(shí)間不多的話,不妨看看快速比較表格:

這是你團(tuán)隊(duì)的主要語言

相比于 bash,大多數(shù)前端團(tuán)隊(duì)都更熟悉 JS。Node 是具有特殊的 API,但總的來說它有函數(shù)一等公民,循環(huán)和 promise 等熟悉特性。bash?我搞了幾年下來還是不確定它是咋工作的 —— 語法很熟悉,但在意想不到的地方又不一樣,大多數(shù)變量是字符串,到底存在模塊不?如果我錯(cuò)了,也不要糾正我,我不關(guān)心了。我一直只是用的時(shí)候去谷歌……

每個(gè)體面的程序員都需要學(xué)習(xí) bash?這是病態(tài)的!如果你的后端同事需要在你的項(xiàng)目中做一些緊急改動(dòng),那他應(yīng)該學(xué)習(xí)一些 JS。C 語言風(fēng)格的語法讓任何人都能大概了解代碼的意圖。當(dāng)然從這個(gè)角度來看 bash 也差不多,但 JS 在這里起碼并不比它差。

在 JS 優(yōu)先的團(tuán)隊(duì)中使用 JS 進(jìn)行自動(dòng)化腳本的編寫,是最合乎邏輯的選擇。

runtime 大概率已經(jīng)安裝了

你的 bash 腳本即使成功運(yùn)行了,麻煩也沒有結(jié)束,因?yàn)樗ǔ?huì)在另一臺(tái)機(jī)器上失敗(說你呢,Alpine Docker 容器……)。各種 shells[3](SH,ASH,BASH,ZSH)都略有不同,在不同的 Linux 發(fā)行版上也不完全通用。你當(dāng)然可以手動(dòng)挑選必要的包,或者重新手寫邏輯,但是真的很浪費(fèi)時(shí)間。

用 Node 的話,丟失的 runtimes 的問題非常少見 - CI 機(jī)器無論如何都可以運(yùn)行 npm / yarn,這些和 node 綁在一起。此外,一旦 node 程序編寫完成,通常每臺(tái)計(jì)算機(jī)上都可以運(yùn)行。

開箱即用的跨平臺(tái)特性

這就引出了下一點(diǎn) —— node 是一個(gè)跨平臺(tái)的運(yùn)行時(shí),在 linux、mac 和 windows 上運(yùn)行良好。對(duì),MacOS 是兼容 POSIX 的,但是許多命令在選項(xiàng)和輸出格式上仍然有細(xì)微的差異?,F(xiàn)在,你需要 Windows 支持嗎?雖然大多數(shù)前端開發(fā)人員都使用 Mac,而且存在 Win 的 bash 端口。但是,免費(fèi)支持開箱即用總是很好的:

  • 降低了開源項(xiàng)目的貢獻(xiàn)障礙。
  • 一旦我需要匆忙在 Windows 服務(wù)器上啟動(dòng) dev 服務(wù)器的時(shí)候,一般都很不愉快。
  • 經(jīng)理想玩玩你的項(xiàng)目,但他用的是 Win 電腦。

Node 團(tuán)隊(duì)花了大量時(shí)間抽象出操作系統(tǒng)之間的差異。忽視這一點(diǎn),而去堅(jiān)持使用 bash,會(huì)適得其反。

直接訪問其他 JS 工具

前端工作流(webpack/parcel/babel/PostSS)中的大多數(shù)工具都開放了 node APIs。甚至像 esbuild 和 swc 這樣的非 JS 工具也提供 node bindings。如果你的自動(dòng)化編排在 node 上運(yùn)行,那么訪問這些 API 就很簡單:只需導(dǎo)入包并調(diào)用函數(shù)。

在 bash 中,有兩個(gè)麻煩的選項(xiàng)可以與基于 node 的工具集成:

  • 通過奇怪的選項(xiàng)格式調(diào)用 CLI。
  • 編寫一個(gè)最小的 JS 包裝器來調(diào)用 node API,從 bash 調(diào)用它。

另外一個(gè)好處是,由于許多工具的 CLI 位于單獨(dú)的軟件包中(如 @babel/CLI),如果直接使用 node API,可以跳過安裝,從而節(jié)省一點(diǎn) npm i時(shí)間。

體面的進(jìn)程間通信

node 作為自動(dòng)化運(yùn)行時(shí)的一個(gè)很棒的方面是它的 IPC 能力。有時(shí)候你更喜歡通過 CLI 而不是 node API 使用其他工具。也可以 —— 在 node 中,這可以通過 child_process[4] 異步且跨平臺(tái)地完成!你甚至可以在不同的進(jìn)程之間使用管道輸出,就像 shell 的管道操作符 |。雖然內(nèi)置的Stream和child_process API 可能不太符合人體工程學(xué),但你可以根據(jù)自己的口味使用包裝器——我比較喜歡execa。

bash 也擅長于流程管理,但對(duì)我來說,有太多的可能性了——參考這個(gè) stackoverflow 問題:里面提到有五種不同的并行運(yùn)行命令的方式[5],如果你不知道自己在做什么,這就很容易讓你搬起石頭砸自己的腳。

龐大的生態(tài)系統(tǒng)

npm 為各種各樣的問題提供了很好的解決方案。我最喜歡的是管理子進(jìn)程的 execa[6]、處理 CLI 選項(xiàng)的yargs[7]和輸出樣式的chalk[8]。

是的,也存在類似的許多命令行工具,但必須使用特定于操作系統(tǒng)的軟件包管理器(apt?brew?apk?)安裝它們。大伙真的不想處理這種問題。此外,您安裝的任何 CLI 軟件包也可以通過 spawn/exec 在 node 中使用。

因此,以下是我選擇 JS/node 來管理復(fù)雜自動(dòng)化工作流的主要原因:

  • JS 是你們團(tuán)隊(duì)的主要語言!
  • 節(jié)點(diǎn)運(yùn)行時(shí)通常安裝在本地和 CI 中,因?yàn)槟幚淼氖?npm/Spread。
  • node 跨平臺(tái)運(yùn)行,與 bash 和 make 不同。
  • node 可以直接訪問其他 JS 工具。
  • node IPC(用于編排 CLI 工具)非常合適,尤其是使用 execa 時(shí)。
  • 在 node 中編寫 CLI 工具,有很多好用的軟件包。

當(dāng)然也有理由避免使用 node(比如缺少關(guān)于自動(dòng)化用例的教程,對(duì)于不熟悉 node 的人來說,異步的復(fù)雜性),但我仍然相信它是 JS 項(xiàng)目中構(gòu)建自動(dòng)化流程最可靠的選擇。

Vladimir:https://thoughtspile.github.io/2022/02/14/js-automation

參考資料

[1]Vladimir: https://twitter.com/thoughtspile

[2]zx: https://github.com/google/zx

[3]各種 shells: https://en.wikipedia.org/wiki/Shell_script

[4]child_process: https://nodejs.org/api/child_process.html

[5]里面提到有五種不同的并行運(yùn)行命令的方式: https://stackoverflow.com/questions/3004811/how-do-you-run-multiple-programs-in-parallel-from-a-bash-script

[6]execa: https://github.com/sindresorhus/execa

[7]yargs: https://github.com/yargs/yargs

[8]chalk: https://github.com/chalk/chalk

責(zé)任編輯:武曉燕 來源: 前端從進(jìn)階到入院
相關(guān)推薦

2025-11-03 04:00:00

2025-08-13 03:00:00

2025-05-19 04:00:00

2020-12-02 11:18:50

print調(diào)試代碼Python

2020-12-04 10:05:00

Pythonprint代碼

2021-06-09 06:41:11

OFFSETLIMIT分頁

2021-01-29 11:05:50

PrintPython代碼

2020-12-15 08:06:45

waitnotifyCondition

2020-12-03 09:05:38

SQL代碼方案

2023-10-26 16:33:59

float 布局前段CSS

2021-05-25 09:30:44

kill -9Linux kill -9 pid

2020-07-17 07:15:38

數(shù)據(jù)庫ID代碼

2022-01-27 07:48:37

虛擬項(xiàng)目Django

2024-12-26 07:47:20

2020-12-08 06:20:49

前端重構(gòu)Vue

2024-06-12 13:54:37

編程語言字符串代碼

2019-03-12 14:48:29

路由器XBOXPS4

2022-10-27 21:34:28

數(shù)據(jù)庫機(jī)器學(xué)習(xí)架構(gòu)

2025-05-15 03:00:00

2025-08-06 09:31:12

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产九九在线视频| 国产精品三区四区| 亚洲精品电影院| 美女精品视频在线| 亚洲自拍与偷拍| 欧美日韩大片一区二区三区 | 精品久久久久久久久国产字幕| 久久精品ww人人做人人爽| 波多野结衣在线电影| 香蕉综合视频| 亚洲另类图片色| 国产精品久久久毛片| 女子免费在线观看视频www| 国产成人精品亚洲午夜麻豆| 日韩美女视频中文字幕| 欧美日韩在线观看免费| 免费精品国产| 欧美成人免费网站| www.日日操| 韩国成人免费视频| 国产精品久久免费看| 国产精品免费视频一区二区 | 久久久福利视频| 国产男女无套免费网站| 天堂一区二区在线免费观看| 欧美激情手机在线视频| 少妇视频在线播放| 加勒比色老久久爱综合网| 欧美日韩一区中文字幕| 欧美 日韩 国产在线观看| 精品综合在线| aaaaa一级片| 精品一区二区三区中文字幕在线| 日韩欧美在线字幕| www插插插无码免费视频网站| 免费在线性爱视频| 成人午夜精品一区二区三区| 亚洲伊人第一页| 伊人久久成人网| 久久不射网站| 97国产在线视频| 欧美日韩精品在线观看视频| 婷婷亚洲综合| 日韩在线欧美在线国产在线| 日本一级免费视频| 一区二区三区日本久久久| 亚洲黄一区二区| 一级黄色免费视频| 日韩欧洲国产| 欧美一区二区三区婷婷月色| 夜夜夜夜夜夜操| 玖玖精品在线| 欧美群妇大交群的观看方式| 我要看一级黄色大片| 美女写真久久影院| 色综合久久99| 日日碰狠狠丁香久燥| 欧美性xxx| 色综合激情久久| 日韩手机在线观看视频| 超碰aⅴ人人做人人爽欧美| 黄色精品一区二区| 欧美亚洲另类色图| 久久精品女人天堂av免费观看| 欧美日韩国产一区中文午夜| 国产二级片在线观看| 黄色在线网站噜噜噜| 欧美日韩国产在线| 久久久国产欧美| 欧美在线一级| 欧美一区二区三区婷婷月色| 亚洲AV成人精品| jizz性欧美23| 日韩av一区在线观看| v8888av| 精品久久久中文字幕| 有码中文亚洲精品| 国产老头老太做爰视频| 欧美搞黄网站| 97精品视频在线| 波多野结衣av无码| 老司机精品视频在线| 亚洲自拍偷拍色片视频| 欧美一级在线免费观看| 久久夜色精品国产噜噜av| 日韩av一级大片| 中文字幕免费高清电视剧网站在线观看 | 怡红院在线观看| 五月婷婷激情综合| 少妇黄色一级片| 日韩视频一二区| 国产丝袜精品第一页| 波多野结衣家庭教师在线观看| 国产精品97| 96精品视频在线| 中文字幕在线视频第一页| 国产精品白丝jk黑袜喷水| 精品久久蜜桃| 9色在线视频网站| 亚洲综合色网站| 国产女女做受ⅹxx高潮| 日本免费成人| 亚洲精品99久久久久| 青青操在线播放| 一本久道久久综合婷婷鲸鱼| 国产精品美女免费看| 人妻一区二区三区免费| 亚洲国产精品成人综合| 精品少妇在线视频| 国产一区影院| 日韩av网址在线观看| 顶级黑人搡bbw搡bbbb搡| 国产精品久久777777毛茸茸| 成人精品久久一区二区三区| 天堂v视频永久在线播放 | 国产精品19乱码一区二区三区| 日韩在线卡一卡二| 国产精品免费一区二区三区| 免费高清完整在线观看| 一本大道久久a久久精二百| 国产精品果冻传媒| 色喇叭免费久久综合网| 欧美中文字幕视频在线观看| 亚洲高清视频网站| 亚洲欧洲日产国产综合网| 免费黄色福利视频| 成人在线超碰| 欧美成人精品xxx| 亚洲专区第一页| 国产亚洲一区二区三区| 看av免费毛片手机播放| 成人搞黄视频| 欧美日韩不卡合集视频| 一级做a爱片久久毛片| 国产丝袜美腿一区二区三区| 日韩视频第二页| 全国精品免费看| 韩国一区二区电影| 亚洲精品18p| 一区二区三区欧美亚洲| www,av在线| 亚洲一区二区| 91亚洲人电影| 91国内在线| 欧美一级日韩免费不卡| 波多野结衣久久久久| 久久精品国产999大香线蕉| 午夜精品一区二区三区四区| 456成人影院在线观看| 国产亚洲免费的视频看| 中文字幕在线天堂| 久久久91精品国产一区二区三区| 免费日韩中文字幕| 国产精品探花在线观看| 国产精品大片wwwwww| 成全电影播放在线观看国语| 在线观看日韩精品| 91无套直看片红桃在线观看| 人人超碰91尤物精品国产| 亚洲国产综合自拍| 日本成人在线网站| 欧美超级免费视 在线| 亚洲国产精品成人久久蜜臀| 亚洲国产你懂的| 一区二区不卡免费视频| 噜噜噜在线观看免费视频日韩| 久热国产精品视频一区二区三区| 欧美xx视频| 深夜福利一区二区| 国产成人麻豆精品午夜在线| 一区二区成人在线| 一级特黄a大片免费| 亚洲欧美日韩在线观看a三区| 欧美性大战久久久久| 国产美女久久| 欧美黄网免费在线观看| 视频在线不卡| 欧美人体做爰大胆视频| 久久久久无码国产精品不卡| 99久久精品99国产精品| 精品久久久噜噜噜噜久久图片| 成人精品天堂一区二区三区| 成人网在线观看| 久热在线观看视频| 中文字幕成人精品久久不卡 | 亚洲精品第一页| 国产午夜无码视频在线观看| 亚洲图片欧美激情| 成人午夜精品无码区| 日韩av电影天堂| 麻豆视频传媒入口| 中日韩免视频上线全都免费| 成人久久久久久久| 日本不良网站在线观看| 精品精品国产国产自在线| 人妻精品一区二区三区| 欧美午夜精品理论片a级按摩| 欧美精品一区二区蜜桃| 久久精品一级爱片| 亚洲 自拍 另类 欧美 丝袜| 噜噜噜在线观看免费视频日韩| aaa免费在线观看| 亚洲婷婷伊人| 91在线免费网站| 毛片无码国产| 欧美精品久久久久久久免费观看| www.久久热.com| 日韩hd视频在线观看| 国产男男gay体育生网站| 色猫猫国产区一区二在线视频| 免费在线观看一级片| 久久久久久久综合日本| 亚洲色图欧美另类| 久久电影国产免费久久电影| 成年网站在线免费观看| 欧美日本在线| 一区二区在线观看网站| 亚洲都市激情| 国产精品视频免费一区| www.久久99| 国产精品视频精品| 欧美最新精品| 热久久这里只有| av岛国在线| 九色成人免费视频| 麻豆电影在线播放| 中文字幕亚洲欧美| 国产二区在线播放| 亚洲欧美日韩国产中文| 欧美 日韩 国产 在线| 91精品福利在线一区二区三区| 精品国产青草久久久久96| 天天操天天色综合| 国产精品二区一区二区aⅴ| 亚洲欧美日韩久久| 免费成人深夜天涯网站| 国产亚洲一区二区三区| 丰满少妇高潮一区二区| 91亚洲精品久久久蜜桃| 国产麻豆xxxvideo实拍| 成人精品在线视频观看| 亚洲无人区码一码二码三码| 国产精品18久久久久久久网站| 日韩成人精品视频在线观看| 麻豆视频一区二区| 色噜噜狠狠一区二区| 蜜桃视频第一区免费观看| 国产一级做a爰片久久| 首页综合国产亚洲丝袜| 青青在线视频免费| 日韩国产精品久久久久久亚洲| 999香蕉视频| 日产国产欧美视频一区精品| 久草福利视频在线| 蜜桃视频在线一区| 手机av在线免费| 极品少妇xxxx精品少妇| 欧美在线a视频| 国产91丝袜在线播放0| 99精品一区二区三区无码吞精| av一区二区三区四区| av在线网站观看| 日本一区二区三区dvd视频在线| 一级黄色性视频| 国产精品久久久久久久久久久免费看 | 国语自产在线不卡| 涩涩av在线| 国产精品91免费在线| 欧美黄页免费| 99久久精品无码一区二区毛片 | 视频一区二区精品| 久久视频精品| 欧美国产视频一区| 亚洲一区一卡| 亚洲综合欧美激情| 国产精品影音先锋| 久久久久亚洲AV成人无码国产| www久久久久| 秋霞欧美一区二区三区视频免费| 一区二区视频免费在线观看| 午夜精品久久久久久久久久久久久蜜桃| 欧美视频免费在线| 在线观看国产小视频| 日韩欧美一二三四区| 日韩欧美在线观看一区二区| 色综合伊人色综合网| 手机av在线播放| 国产成人午夜视频网址| 免费看日产一区二区三区| 久久精品国产综合精品| 欧美顶级大胆免费视频| 霍思燕三级露全乳照| 老司机午夜精品视频| 天堂网成人在线| 久久久精品免费免费| 亚洲天堂黄色片| 狠狠做深爱婷婷久久综合一区| 91尤物国产福利在线观看| 亚洲激情自拍图| 欧美性videos| 日韩男女性生活视频| 最新国产一区二区| 伊人情人网综合| 亚洲欧美日本国产专区一区| 永久看看免费大片| 亚洲国产成人一区二区三区| 日韩精品――中文字幕| 91麻豆精品国产| 第九色区av在线| 51ⅴ精品国产91久久久久久| 玖玖玖电影综合影院| 亚欧精品在线| 久久高清免费观看| 中文字幕视频观看| 亚洲欧美怡红院| 亚洲av人无码激艳猛片服务器| 欧美精品一区二区蜜臀亚洲| 久热国产在线| 国产精品久久久久久网站| 同性恋视频一区| 国产极品尤物在线| 国产一区二区导航在线播放| 欧美午夜激情影院| 色偷偷成人一区二区三区91| 四虎在线视频免费观看| 九九久久久久久久久激情| 亚洲人成网站在线在线观看| 日日骚一区二区网站| 久久aⅴ国产紧身牛仔裤| 91传媒理伦片在线观看| 亚洲精品乱码久久久久| 国产精品特级毛片一区二区三区| 亚洲欧美一区二区精品久久久| 欧美少妇精品| 久久涩涩网站| 日韩午夜电影| 欧美大片免费播放器| 亚洲第一在线综合网站| 男人天堂网在线视频| 久久久之久亚州精品露出| y111111国产精品久久久| 9191国产视频| 高清视频一区二区| 免费网站看av| 精品处破学生在线二十三| 毛片网站在线看| 国产传媒一区二区三区| 国内精品美女在线观看| 亚洲少妇中文字幕| 亚洲成av人综合在线观看| 男人天堂手机在线观看| 91精品国产免费久久久久久| 另类尿喷潮videofree| 久久精品国产精品亚洲色婷婷| www国产亚洲精品久久麻豆| 欧美一区二区三区网站| 亚洲天堂男人的天堂| 成人国产精品入口免费视频| 三年中文高清在线观看第6集| 激情六月婷婷综合| 九九九在线视频| 日韩av在线免费播放| 成人国产二区| 亚洲一二区在线| 国产精品77777竹菊影视小说| 久久久久99精品成人片毛片| 亚洲精品mp4| 超碰这里只有精品| 激情视频小说图片| 99国产精品国产精品毛片| 福利网址在线观看| 日韩中文字幕在线观看| 亚洲午夜免费| 国产精品69页| 亚洲少妇中出一区| 天天干天天色天天| 国产精品旅馆在线| 国产综合自拍| 国产免费无遮挡吸奶头视频| 欧美一区二区三区四区久久| av成人 com a| 一区二区成人国产精品| 成人免费毛片app| 最近中文字幕免费在线观看| 九九热这里只有精品6| 国产精品免费不| 中文字幕无人区二| 色成年激情久久综合| av毛片在线免费看| 免费成人深夜夜行视频| 国产在线国偷精品免费看| 久久亚洲天堂网| 欧美成人精品在线观看| 国产成人精品一区二区免费看京 | 91麻豆视频网站| 国产又粗又猛又黄| 91成人福利在线| 中文精品久久| 免费福利视频网站| 亚洲精品一区二区三区蜜桃下载|