tea 是統一包裝的基礎設施。來自 brew 的創建者,tea 是一個獨立的、適用於所有平台的二進制文件,使整個開源生態系統觸手可及。打破編程社區之間的孤島,把使用完全不同的工具和語言的腳本放在一期,通過簡單的一行代碼與世界分享。

不過需要注意的是現在 tea 還沒到 v1 版本,所以可能在日常使用中仍有一些小問題,當然這也意味着你更應該參與進來,這是關鍵和黃金時期,參與其中既容易又非常有趣。
tea/cli 0.13.8開源是一個寶庫 - 但這些寶箱都用粗糙的鎖鎖住了。tea 就是關鍵:
$tea+rust-lang.orgtea:installingrust-lang.organd13otherpackagesintoatemporarysandboxwhendonetype:exittea$cat<<EOF>hello.rsfnmain(){println!("HelloWorld!");}EOF$rustchello.rs-ohello$./helloHelloWorld!tea$exit$rustccommandnotfound:rustctea 不安裝軟件包,至少不是傳統意義上的,我們將它們存放在 ~/.tea 中,你的系統保持原始狀態,並與 tea 的操作隔離開來,但當你需要使用的時候,一切都準備好了。
† 後面是一個包管理器,其中所有的軟件包都是可重定位的。
tea 的 +pkg 語法讓整個開源生態系統觸手可及,如果你在 +pkg 處,則會發生上述情況,我們在環境中打開一個包含這些包的新 shell,但如果你繼續輸入,你就可以構建直接使用。
#^^一行程序啟動本地web服務器並進行實時加載$tea+nodejs.orgnpx--yesbrowser-syncstart--server$sh<(curltea.xyz)+nodejs.orgnpx--yesbrowser-syncstart--server#^^同樣一行,適用於有網絡的任何用戶#(如果tea已經安裝了,則直接使用,如果沒有安裝,將創建一個臨時的沙盒環境)組合一切,結合一切——就像 UNIX 哲學一樣,這樣就可以把我們帶入 tea 的管道 pipelines 中:
$tea+gnu.org/wgetwget-qO-tea.xyz/white-paper|tea+charm.sh/glowglow-上面的示例命令會下載 tea 的白皮書文件,並使用 charm 非常優秀的 glow 終端 markdown 渲染器進行渲染。這是一個基本的示例,但 UNIX 受包管理器的限制實在太久了,這也是 tea 旨在克服的一個基本限制。
另外值得注意的是,使用 -X 語法可以更簡潔地表達:
$tea-Xwget-qO-tea.xyz/white-paper|tea-Xglow-如果你想試用最新版本的 node,但不確定它是否適用於你的項目?tea 也可以非常容器實現。
$tea+nodejs.org^19npmstart同樣可以使用一行命令來創建一個 react 應用:
$sh<(curltea.xyz)-Xnpxcreate-react-appmy-apptea:通用解釋器$teahttps://gist.githubusercontent.com/i0bj/2b3afbe07a44179250474b5f36e7bd9b/raw/colors.go--yellowtea:installinggo1.18.3go:installingdepsgo:runningcolors.go…在這個基本的例子中,我們知道要根據文件擴展名先安裝 go,很明顯,對吧?
$teafavicon-generator.shinput.pngtea:installingimage-magick,optipng,guetzliand3otherpackages……output:favicon-128.png…$catfavicon-generator.sh#!/usr/bin/envtea#---#args:[/bin/sh,-e]#dependencies:#imagemagick.org:4#optipng.sourceforge.net:1#[snip]…#---tea 讀取 YAML 文件的前端信息,允許你在整個開源生態系統中為腳本、gists 和一行程序進行操作。在運行時,腳本在其環境中具有這些依賴項,但系統的其餘部分永遠不會知道它們。
我們還知道更多的魔法:
$tea-Xnodetea:installingnode@18.9.1WelcometoNode.jsv18.9.1.Type".help"formoreinformation.>通常 tea 使用包的完全限定名稱,但我們知道它們提供什麼工具,所以只要你知道正在查找的是什麼工具,我們就可以弄清楚其餘的相關依賴。將來版本中會提供如下的方式來支持依賴聲明:
---dependencies:nodejs.org:19npmjs.com:package.json:dependencies:react:^18---tea:通用虛擬環境管理器$denozsh:commandnotfound:deno$echo$PATH/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin$cdmy-project$denotea:installingdeno.land^1.22deno1.27.0>^D$envPATH=~/.tea/deno.land/v1.27.0/bin:/usr/bin:/binSRCROOT=/src/my-projectVERSION=……同樣比如需要 34 個依賴項來編譯我們的白皮書,但有了 tea 就非常簡單的了:
$gitclonehttps://github.com/teaxyz/white-paper$cdwhite-paper$make#†tea:installingpandoc.organd33otherdependencies……$opentea.white-paper.pdf我們的白皮書依賴項在我們的 README 中以簡單的 markdown 格式編寫。tea 只需進入目錄即可為他們設置一個虛擬環境。
† 在 macOS 上,你可能需要先執行 tea -S,因為我們重新使用系統 make(我們嘗試檢測系統安裝的 deps),因此我們無法攔截調用。
基本原理tea 使用 shell hook 將你項目所需的工具插入到 shell 環境中。開發現在在包管理器級別進行了容器化,你不再需要擔心你的團隊使用不同版本的基礎工具,也不必擔心系統級更新會破壞你正在處理的不同項目。
有數以千計的版本管理器來支持成千上萬的工具,也許現在是時候停止這種重複工作的時候了。項目可以準確地指定他們需要什麼,你可以在今天、明天或十年後準確地滿足這些需求。
在上面的示例中,如果 deno 尚未安裝,我們將插入一個 hook,以便嘗試執行它時將首先安裝它。
停止使用 DockerDocker 非常適合部署和交叉編譯,但是......讓我們面對現實吧:它對開發人員來說很糟糕。
Docker 扼殺了 builders,它限制了你;技術不斷進步,但你的 Docker 容器仍然不能動,沒有人知道如何使用 docker,一旦配置了 Dockerfile,就沒有人敢碰它了。
讓我們面對現實吧,讓你的個人開發和調試工具在這個鏡像中工作是非常令人沮喪的,為什麼要限制你的潛力呢?
繼續使用用 Docker 部署,但是用 tea 來開發。
然後當你部署時,你也可以用 tea 來安裝這些依賴組件。
tea 與系統打包程序不同,它有適當的版本控制,所以使用 tea,你的部署實際上會更穩定。
可執行的 MarkdownMarkdown 已經成為了開發的標準文檔格式,與其編寫帶有注釋的腳本,不如編寫可以運行的文檔。
$tea.#interprets`#GettingStarted`,couldalsobe`tea./README.md`tea:npminstalltea:npmstart$sh<(curltea.xyz)https://github.com/my/projecttea:cloning…tea:npmstart$gitclonehttps://github.com/my/project$cdproject$teabuildtea:executing`#Build`在 CI 中使用這些腳本很簡單:
steps:-uses:teaxyz/setup@v0with:target:build可以查看 teaxyz/setup 了解們的 GitHub Action 執行的所有操作。
安裝使用tea 是一個獨立的二進制文件,因此,如果你願意,可以自己下載安裝,我們推薦使用我們的安裝程序:
$sh<(curlhttps://tea.xyz)%Total%Received%XferdAverageSpeedTimeTimeTimeCurrentDloadUploadTotalSpentLeftSpeed1009259100925900795600:00:010:00:01--:--:--8030hi👋let’ssetuptea•we』llputithere:/Users/cnych/.tea•everythingteainstallsgoesthere•(wewon’ttouchanythingelse)│docshttps://github.com/teaxyz/cli#getting-startedk,weinstalled/Users/cnych/.tea/tea.xyz/v0.13.8/bin/teaonesecond!tea’snotinyourpath!│wemayneedtoaskforyourrootpassword(viasudoobv.)Password:wantmagic?tea’sshellmagicworksviaaone-lineadditiontoyour~/.zshrcit’snotrequired,butwedorecommendit.│docshttps://github.com/teaxyz/cli#usage-as-an-environment-manageryou’reallset!tryitout:┌───────────────────────────────────────────────────────────────────────────┐│tea+gnu.org/wgetwget-qO-tea.xyz/white-paper|tea+charm.sh/glowglow-│└───────────────────────────────────────────────────────────────────────────┘† 如果你想要 tea 的虛擬環境管理器功能,上面的安裝方式是最簡單的。
協議Tea.xyz 是以去中心化協議的模式激勵開源社區。通過 tea 協議,開源軟件包維護者,可以把自己負責的版本發布到由區塊鏈驅動的去中心化註冊倉庫,從而消除單一故障源,發布無法篡改的版本,允許社區管理整個開源生態系統區域,避免外部影響。
tea 可以激勵開源生態系統,主要方式是是通過讓參與 tea 協議的開發者,將能夠獲取的價值與所依賴並希望保護的軟件包進行質押。tea 協議的圖表可以提供不可篡改的的軟件包註冊、對於依賴性要求、驗證軟件包的真實性,以及通過預言機告知 tea 報酬激勵算法。系統性的通貨膨脹,基於算法會被分攤到所有軟件包上,如果發現安全或開發問題,開發者可以通過上傳證據,可以針對軟件包的索賠,系統會對有錯誤和安全上傳方進行索賠。開源社區的成員可以審查軟件包的質量問題,而 tea 協議可以通過制定比例的削獎勵減,來應對這些審查。
Git 倉庫:https://github.com/teaxyz/cli