日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

          歡迎訪問 生活随笔!

          生活随笔

          當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

          编程问答

          uibot在子程序执行js失败_使用 Node.js 将珍藏的 bash 脚本封装成命令行工具

          發布時間:2023/12/4 编程问答 36 豆豆
          生活随笔 收集整理的這篇文章主要介紹了 uibot在子程序执行js失败_使用 Node.js 将珍藏的 bash 脚本封装成命令行工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

          闡述如何將一個常用的 bash 腳本融入 npm 生態之中,此處以最近遇到的一個 CR 提交腳本為例。

          背景

          作為程序猿,大家或多或少地都用過 GitHub 上的 merge request 功能。當然,除了這類 Code Review 方式,不少公司都有自己的 Code Review 平臺,我司也不例外,我們使用了類似 Gerrit 的工具,此處我們暫且以 Gerrit 指代。由于最近在治理工程時,需要全面切(要)到(求)使用 Gerrit 進行 CR 提交。發現 Gerrit 提交命令不是那么好記,經常需要先 git push,接著被攔截報錯之后,再根據提示復制命令行,再次執行方可成功提交 Gerrit 。作為攻城獅,這有點難以忍受了!!!

          訴求

          一、有沒有單獨的命令讓我直接提交 Gerrit?

          二、有沒有命令行工具,我直接安裝就能使用?

          三、在 git push 后,經由 git hook 攔截后按需提交 Gerrit?

          解決

          一、有沒有單獨的命令讓我直接提交 Gerrit?

          答:有的,有次同事見我提交 Gerrit 不順暢,轉發了一個 bash 腳本給我:『你把它復制到 /usr/local/bin 目錄下,就能直接使用 gerrit 執行了』。珍藏腳本如下(gerrit):

          bash branch=$(git symbolic-ref --short -q HEAD)
          git push origin HEAD:refs/for/${branch}

          二、有沒有命令行工具,我直接安裝就能使用?

          答:有的,既然都有腳本了,作為前端開發,必須用心愛的 Node.js 封裝一個命令行工具,只需兩步即可使用:首先執行 npm i @dd/gerrit-cli -g ;接著在工程目錄下執行 gerrit 即可使用。

          三、在 git push 后,經由 git hook 攔截后按需提交 Gerrit?

          答:有的,如果你還覺得全局安裝命令行太麻煩,或者害怕新人來了一臉懵逼。那么,還可以借助 git hook 進行攔截,用戶只需要『無腦地』執行 git push 即可。當然前端這塊有現成的 git hook 神器,它就是人見人愛的哈士奇,至于其它語言生態,大家找找應該有的。

          我們來看看如何封裝上述腳本吧!

          實現方式

          1. 配置命令

          如何能讓別人安裝你的 npm 包時,就能在終端中執行命令行呢?只需對你的 npm 包的 package.json 添加 bin 字段:

          {"name": "your-first-cli-package","version": "1.0.0","description": "你的第一個命令行工具","main": "index.js","bin": {"yourCommand": "index.js"}, }

          之后別人使用 npm i -g your-first-cli-package 時,即可在終端中執行 yourCommand 調用你的 index.js 的邏輯啦。如果使用局部安裝的方式,即 npm i your-first-cli-package,命令行將被安裝到 node_modules/.bin/yourCommand 下,其內容正是 index.js 的內容。此時可編輯 npm scripts 調用。

          2. 調用聲明

          由于我們使用 Node.js 實現,因此命令行對應的入口 js 文件(此處即 index.js)需要聲明當前文件使用 node 執行:

          #!/usr/bin/env node // 此處編寫 yourCommand 命令的邏輯

          3. 編寫邏輯

          此處實現得比較粗糙,目前就一個命令,因此未引入 args 這類包。

          #!/usr/bin/env nodeconst execa = require('execa') const chalk = require('chalk')const run = async () => {let branch = ''let result = ''try {console.log(chalk.gray(`獲取當前分支...`))const { stdout } = await execa.command('git symbolic-ref --short -q HEAD')branch = stdoutconsole.log(chalk.gray(`當前分支為: ${branch}`))} catch (error) {console.log(chalk.red(`獲取分支失敗:${error.message}`))process.exit(1) // 以失敗碼退出,用于 git hooks 攔截識別}try {console.log(chalk.gray(`檢查當前分支是否推送過遠程倉庫...`))await execa.command(`git rev-parse --abbrev-ref ${branch}@{upstream}`)console.log(chalk.gray(`當前分支存在于 ${branch} 遠程倉庫...`))} catch (error) {console.log(chalk.yellow(`當前分支 ${branch} 未推送遠程倉庫 ${error.message}`),)try {console.log(chalk.green(`嘗試推送分支 ${branch} 至遠程倉庫`))const { stderr } = await execa.command(`git push --set-upstream origin ${branch} --no-verify`,)result = stderr} catch (error) {console.log(chalk.red(`提交 gerrit 失敗:${error.message}`))process.exit(1)}}try {console.log(chalk.gray(`對分支 ${branch} 提交 gerrit ...`))const { stderr } = await execa.command(`git push origin HEAD:refs/for/${branch} --no-verify`,)result = stderr} catch (error) {console.log(chalk.red(`提交 gerrit 失敗:${error.message}`))process.exit(1)}console.log(chalk.green(`${branch} 提交 gerrit 成功,信息如下:n${result}`))process.exit(0) // 以成功碼退出,用于 git hooks 通過識別 }run()

          使用方式

          全局使用(非前端工程推薦使用)

          安裝

          npm i @dd/gerrit-cli -g

          執行

          確保在 git 工程目錄下 gerrit

          示例

          JavaScript 工程局部使用(前端工程推薦使用)

          安裝

          npm i @dd/gerrit-cli --save-dev

          在 package.json 中新增 gerrit scripts

          "scripts": {..."cr": "gerrit"...},

          執行

          確保在 git 工程目錄下

          npm run cr

          示例

          和 husky 配合使用

          在 package.json 中新增 gerrit scripts

          "scripts": {..."cr": "gerrit"... }, "husky": {"hooks": {"pre-push": "npm run cr"} },

          執行

          確保在 git 工程目錄下

          git push

          示例

          TODO

          • 新增子命令支持生成 gerrit 的配置文件
          • 打印對應的 CR 規范的文檔鏈接,否則新人會懵逼
          • 封裝成 SDK 供其它工具調用

          總結

          我們多多少少會遇到類似的場景,以工程化的視角去封裝它,讓原本 npm 生態之外的 bash 腳本也能融于無形!

          點擊閱讀我的更多文章?quanru.github.io

          [滴滴出行-北京、杭州] 前端/算法/Android/Go/ Java /iOS/ PHP /C++等各類職位大量招聘,月 25k-60k,優秀另有期權

          滴滴 2020 年大量職位內推,具體如下:

          一、主要招聘職位 Java/前端 /Go/Php/C++/算法 /Android/iOS/大數據 /數分等等職位大量招聘。 業務包括網約車 /國際化 /車服 /兩輪車 /外賣 /專車 /快車 /金融 /大數據 /地圖等。

          二、主要待遇 ① 有競爭力的薪資或期權 ② 六險一金,父母及子女的商業保險 ③ 全員 Mac,免費下午茶、免費晚餐 ④ 有孩子或者懷孕的女性員工有每周一天的在家辦公機會

          三、職位描述及要求 技術崗位主要在北京、杭州。所有職位詳情可見: http://talent.didiglobal.com/social/list/1 可在這里選擇合適職位

          四、內推方式 歡迎將合適職位鏈接及簡歷直接發送到 quanruzhuoxiu@gmail.com 或微信(zhuoxiu_)聯系我內推。 任何問題或疑惑歡迎留言,有關系好的小伙伴也可以給我們推薦。

          總結

          以上是生活随笔為你收集整理的uibot在子程序执行js失败_使用 Node.js 将珍藏的 bash 脚本封装成命令行工具的全部內容,希望文章能夠幫你解決所遇到的問題。

          如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

          主站蜘蛛池模板: av拍拍拍| 影音先锋制服 | www.黄色片| 免费搞黄网站 | 在线a| 国产三区精品 | av在线观看地址 | 爱操av| 成年人网站黄色 | 国产成人精品一区二区无码呦 | 韩日三级视频 | 国产中文字幕在线观看 | 久久高清内射无套 | 精品国产91乱码一区二区三区 | 国产色无码精品视频 | 中文在线√天堂 | 激情文学88 | 中国美女毛片 | 欧美日韩视频在线播放 | www性| 亚洲美女精品视频 | 国语对白做受按摩的注意事项 | 国产av第一区 | 国产91精品看黄网站在线观看 | 国产主播中文字幕 | 九九综合久久 | 成人一区av | 国产精品自拍视频一区 | 一级黄色片在线观看 | 久久22| 图书馆的女友动漫在线观看 | 黄色工厂在线观看 | 精品国产一区二区不卡 | 六月丁香综合 | 国产一级一片 | 国产第9页 | aaaa黄色片 | 女人张开双腿让男人捅 | 无码一区二区三区在线观看 | 深爱五月网 | 日韩爱爱片 | 日韩和欧美一区二区 | 午夜天堂在线观看 | 日韩激情文学 | 日本极品喷水 | 福利视频导航网 | 日韩中文一区二区 | 久久精品国产清自在天天线 | 麻豆视频一区二区三区 | 大地资源二中文在线影视免费观看 | 久久人人精 | 日本三级精品 | 一区二区三区中文字幕在线观看 | 国产一区二区自拍 | 中文字幕在线免费视频 | 先锋影音久久 | 亚洲欧美日本一区二区 | 91精品国自产在线偷拍蜜桃 | 碰超在线 | 久久九九热 | 国产精品国产成人国产三级 | 日本人妻不卡一区二区三区中文字幕 | 91tv在线观看 | 精品欧美激情精品一区 | 日韩欧美一区二区免费 | 色婷婷免费视频 | 99精品毛片| 国产91边播边对白在线 | 边打电话边做 | 一区二区免费在线视频 | 国产在线免费观看 | 午夜影院污 | 性色av一区二区三区红粉影视 | 葵司有码中文字幕二三区 | 特黄视频在线观看 | 少妇喷潮明星 | 99精品视频免费版的特色功能 | 日本啪啪啪一区二区 | 国产 日韩 一区 | 黄色特级大片 | 一区二区三区黄色 | 91视| 国产自在线 | 伊人成年网| 欧美久久久久久久久中文字幕 | 丁香五香天堂网 | 午夜快播| 国产无遮挡18禁无码网站不卡 | 日日草夜夜草 | av作品在线观看 | 日本一区二区三区在线看 | 在线观看 中文字幕 | 嫩草视频在线观看视频 | 一级艳片新婚之夜 | 日本污视频在线观看 | 无码人妻aⅴ一区二区三区日本 | 国产精品久久久久久亚洲色 | 成人h片| 91免费入口 |