tea
是统一包装的基础设施。来自 brew
的创建者,tea
是一个独立的、适用于所有平台的二进制文件,使整个开源生态系统触手可及。打破编程社区之间的孤岛,把使用完全不同的工具和语言的脚本放在一期,通过简单的一行代码与世界分享。

不过需要注意的是现在 tea
还没到 v1 版本,所以可能在日常使用中仍有一些小问题,当然这也意味着你更应该参与进来,这是关键和黄金时期,参与其中既容易又非常有趣。
tea/cli 0.13.8
开源是一个宝库 – 但这些宝箱都用粗糙的锁锁住了。tea
就是关键:
$ tea +rust-lang.org
tea: installing rust-lang.org and 13 other packages into a temporary sandbox
when done type: exit
tea $ cat <<EOF >hello.rs
fn main() {
println!("Hello World!");
}
EOF
$ rustc hello.rs -o hello
$ ./hello
Hello World!
tea $ exit
$ rustc
command not found: rustc
tea
不安装软件包,至少不是传统意义上的,我们将它们存放在 ~/.tea
中,你的系统保持原始状态,并与 tea
的操作隔离开来,但当你需要使用的时候,一切都准备好了。
†
后面是一个包管理器,其中所有的软件包都是可重定位的。
tea
的 +pkg
语法让整个开源生态系统触手可及,如果你在 +pkg
处,则会发生上述情况,我们在环境中打开一个包含这些包的新 shell
,但如果你继续输入,你就可以构建直接使用。
# ^^ 一行程序启动本地 web 服务器并进行实时加载
$ tea +nodejs.org npx --yes browser-sync start --server
$ sh <(curl tea.xyz) +nodejs.org npx --yes browser-sync start --server
# ^^ 同样一行,适用于有网络的任何用户
# (如果 tea 已经安装了,则直接使用,如果没有安装,将创建一个临时的沙盒环境)
组合一切,结合一切——就像 UNIX 哲学一样,这样就可以把我们带入 tea
的管道 pipelines 中:
$ tea +gnu.org/wget wget -qO- tea.xyz/white-paper | tea +charm.sh/glow glow -
上面的示例命令会下载 tea
的白皮书文件,并使用 charm 非常优秀的 glow
终端 markdown 渲染器进行渲染。这是一个基本的示例,但 UNIX 受包管理器的限制实在太久了,这也是 tea
旨在克服的一个基本限制。
另外值得注意的是,使用 -X
语法可以更简洁地表达:
$ tea -X wget -qO- tea.xyz/white-paper | tea -X glow -
如果你想试用最新版本的 node,但不确定它是否适用于你的项目?tea
也可以非常容器实现。
$ tea +nodejs.org^19 npm start
同样可以使用一行命令来创建一个 react 应用:
$ sh <(curl tea.xyz) -X npx create-react-app my-app
tea:通用解释器
$ tea https://gist.githubusercontent.com/i0bj/2b3afbe07a44179250474b5f36e7bd9b/raw/colors.go --yellow
tea: installing go 1.18.3
go: installing deps
go: running colors.go
…
在这个基本的例子中,我们知道要根据文件扩展名先安装 go
,很明显,对吧?
$ tea favicon-generator.sh input.png
tea: installing image-magick, optipng, guetzli and 3 other packages…
…
output: favicon-128.png…
$ cat favicon-generator.sh
#!/usr/bin/env tea
#---
# args: [/bin/sh, -e]
# dependencies:
# imagemagick.org: 4
# optipng.sourceforge.net: 1
# [snip]…
#---
tea
读取 YAML 文件的前端信息,允许你在整个开源生态系统中为脚本、gists 和一行程序进行操作。在运行时,脚本在其环境中具有这些依赖项,但系统的其余部分永远不会知道它们。
我们还知道更多的魔法:
$ tea -X node
tea: installing node@18.9.1
Welcome to Node.js v18.9.1.
Type ".help" for more information.
>
通常 tea
使用包的完全限定名称,但我们知道它们提供什么工具,所以只要你知道正在查找的是什么工具,我们就可以弄清楚其余的相关依赖。将来版本中会提供如下的方式来支持依赖声明:
---
dependencies:
nodejs.org: 19
npmjs.com:
package.json:
dependencies:
react: ^18
---
tea:通用虚拟环境管理器
$ deno
zsh: command not found: deno
$ echo $PATH
/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin
$ cd my-project
$ deno
tea: installing deno.land^1.22
deno 1.27.0
> ^D
$ env
PATH=~/.tea/deno.land/v1.27.0/bin:/usr/bin:/bin
SRCROOT=/src/my-project
VERSION=…
…
同样比如需要 34 个依赖项来编译我们的白皮书,但有了 tea
就非常简单的了:
$ git clone https://github.com/teaxyz/white-paper
$ cd white-paper
$ make #†
tea: installing pandoc.org and 33 other dependencies…
…
$ open tea.white-paper.pdf
我们的白皮书依赖项在我们的 README 中以简单的 markdown 格式编写。tea
只需进入目录即可为他们设置一个虚拟环境。
†
在 macOS 上,你可能需要先执行 tea -S
,因为我们重新使用系统 make
(我们尝试检测系统安装的 deps),因此我们无法拦截调用。
基本原理
tea 使用 shell hook 将你项目所需的工具插入到 shell 环境中。开发现在在包管理器级别进行了容器化,你不再需要担心你的团队使用不同版本的基础工具,也不必担心系统级更新会破坏你正在处理的不同项目。
有数以千计的版本管理器来支持成千上万的工具,也许现在是时候停止这种重复工作的时候了。项目可以准确地指定他们需要什么,你可以在今天、明天或十年后准确地满足这些需求。
在上面的示例中,如果 deno
尚未安装,我们将插入一个 hook,以便尝试执行它时将首先安装它。
停止使用 Docker
Docker 非常适合部署和交叉编译,但是……让我们面对现实吧:它对开发人员来说很糟糕。
Docker 扼杀了 builders,它限制了你;技术不断进步,但你的 Docker 容器仍然不能动,没有人知道如何使用 docker,一旦配置了 Dockerfile
,就没有人敢碰它了。
让我们面对现实吧,让你的个人开发和调试工具在这个镜像中工作是非常令人沮丧的,为什么要限制你的潜力呢?
继续使用用 Docker 部署,但是用 tea
来开发。
然后当你部署时,你也可以用 tea
来安装这些依赖组件。
tea
与系统打包程序不同,它有适当的版本控制,所以使用 tea
,你的部署实际上会更稳定。
可执行的 Markdown
Markdown 已经成为了开发的标准文档格式,与其编写带有注释的脚本,不如编写可以运行的文档。
$ tea . # interprets `# Getting Started`, could also be `tea ./README.md`
tea: npm install
tea: npm start
$ sh <(curl tea.xyz) https://github.com/my/project
tea: cloning…
tea: npm start
$ git clone https://github.com/my/project
$ cd project
$ tea build
tea: executing `# Build`
在 CI 中使用这些脚本很简单:
steps:
- uses: teaxyz/setup@v0
with:
target: build
可以查看 teaxyz/setup 了解们的 GitHub Action 执行的所有操作。
安装使用
tea
是一个独立的二进制文件,因此,如果你愿意,可以自己下载安装,我们推荐使用我们的安装程序:
$ sh <(curl https://tea.xyz)
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9259 100 9259 0 0 7956 0 0:00:01 0:00:01 --:--:-- 8030
hi 👋 let’s set up tea
• we’ll put it here: /Users/cnych/.tea
• everything tea installs goes there
• (we won’t touch anything else)
│ docs https://github.com/teaxyz/cli#getting-started
k, we installed /Users/cnych/.tea/tea.xyz/v0.13.8/bin/tea
one second!
tea’s not in your path!
│ we may need to ask for your root password (via sudo obv.)
Password:
want magic?
tea’s shell magic works via a one-line addition to your ~/.zshrc
it’s not required, but we do recommend it.
│ docs https://github.com/teaxyz/cli#usage-as-an-environment-manager
you’re all set!
try it out:
┌───────────────────────────────────────────────────────────────────────────┐
│tea +gnu.org/wget wget -qO- tea.xyz/white-paper | tea +charm.sh/glow glow -│
└───────────────────────────────────────────────────────────────────────────┘
†
如果你想要tea
的虚拟环境管理器功能,上面的安装方式是最简单的。
协议
Tea.xyz
是以去中心化协议的模式激励开源社区。通过 tea
协议,开源软件包维护者,可以把自己负责的版本发布到由区块链驱动的去中心化注册仓库,从而消除单一故障源,发布无法篡改的版本,允许社区管理整个开源生态系统区域,避免外部影响。
tea
可以激励开源生态系统,主要方式是是通过让参与 tea
协议的开发者,将能够获取的价值与所依赖并希望保护的软件包进行质押。tea
协议的图表可以提供不可篡改的的软件包注册、对于依赖性要求、验证软件包的真实性,以及通过预言机告知 tea
报酬激励算法。系统性的通货膨胀,基于算法会被分摊到所有软件包上,如果发现安全或开发问题,开发者可以通过上传证据,可以针对软件包的索赔,系统会对有错误和安全上传方进行索赔。开源社区的成员可以审查软件包的质量问题,而 tea
协议可以通过制定比例的削奖励减,来应对这些审查。
Git 仓库:https://github.com/teaxyz/cli
原文始发于微信公众号(Github爱好者):Homebrew 作者发布的去中心化激励开源社区 – Tea.xyz
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/87784.html