公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

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

不过需要注意的是现在 tea 还没到 v1 版本,所以可能在日常使用中仍有一些小问题,当然这也意味着你更应该参与进来,这是关键和黄金时期,参与其中既容易又非常有趣。

tea/cli 0.13.8

开源是一个宝库 - 但这些宝箱都用粗糙的锁锁住了。tea 就是关键:

$ tea +rust-lang.orgtea: installing rust-lang.org and 13 other packages into a temporary sandbox
when done type: exittea $ 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: 19npmjs.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@v0with:target: build

可以查看 teaxyz/setup 了解们的 GitHub Action 执行的所有操作。

安装使用

tea 是一个独立的二进制文件,因此,如果你愿意,可以自己下载安装,我们推荐使用我们的安装程序:

$ sh <(curl https://tea.xyz)% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100  9259  100  9259    0     0   7956      0  0:00:01  0:00:01 --:--:--  8030hi 												

Tea.xyz: 一个去中心化模式的激励开源社区,Homebrew 作者建立相关推荐

  1. Redis集群——去中心化模式

    去中心化模式特点 之前介绍的主从模式和哨兵模式都只有一个master主节点,如果写操作并发比较大时,这两个模式就会堵塞.这时就可以使用集群化模式,也称之为去中心化模式,其特点是多master和多sla ...

  2. 独立站 “ 去中心化 ” 模式崛起,席卷跨境企业转型浪潮

    一:独立站趋势 今年以来,受疫情全球蔓延.地缘政治等因素的影响,逆全球化趋势明显,外贸行业面临巨大挑战.大量企业面临订单下降.物流通道不畅.资金紧张.供应链阻断等压力. 而从需求端来看:去中心化的社交 ...

  3. 一个去中心化的数据中心操作系统模型

    目录 前言 3.一个去中心化的数据中心操作系统模型 3.1定义和概念 3.2要求 3.2.1效率要求 3.2.2安全要求 3.2.3其他要求 3.3分布式对象 3.4资源命名 3.5资源管理 3.6永 ...

  4. C语言宠物领养系统,开发一个去中心化应用Dapp-宠物领养

    1. 参考资料 http://truffleframework.com/tutorials/pet-shop 这是一个使用以太坊开发的完整的去中心化应用(Dapp),出自tuffle suite. P ...

  5. 区块链开发实战:如何从零打造一个去中心化应用

    编译 | 区块链大本营 整理 | reason_W 区块链会是一场革命吗? 今天,很多成功的互联网企业都是在以中介者的形式存在.比如Google--你和互联网之间的中介,比如亚马逊--买家和卖家之间的 ...

  6. 一个去中心化的免费电子书共享网站 JS解码URL和编码URL

    原文链接: 一个去中心化的免费电子书共享网站 JS解码URL和编码URL 上一篇: js 一个神奇的尾递归优化 下一篇: Firefox 特性 svg mask 和clip-path的区别 https ...

  7. 还记得当年的百度贴吧吗? 今天, 有人写了一个去中心化的...

    来源 | Embark 编译 | 王国玺 责编 | 乔治 出品 | 区块链大本营(blockchain_camp) 今天科技圈最大的新闻莫过于百度李彦宏被"浇水"一事了,微博.微信 ...

  8. 如何构建一个去中心化自治组织产品(DAO)?

    一.底层逻辑 陈菜根说的一级市场贫瘠,谈二级市场等同于诈骗,了解经济学我们就知道,这其实是母庸置疑的事实. 也就是说二级市场是依托于有真实价值的一级市场的,如果金融要去中心化,那么一级市场必须要先去中 ...

  9. GPS:一个去中心化的抽奖式Token Offering模型

    随着区块链行业的逐渐理性化,大量Token Fund和散户投资者对区块链项目心存戒备.究其原因,主要是由于传统的Token Offering存在以下弊端: 第一,项目团队拥有特权,滥用甚至侵吞投资者资 ...

最新文章

  1. mysql远程访问,修改root密码
  2. Maven命令行使用:mvn clean install(安装)
  3. 天空之城 matlab,[转载]matlab演奏《天空之城》代码
  4. 导出配置_Lua配置表导出优化
  5. 单页web应用是什么?它又会给传统网站带来哪些好处?
  6. 理解Asp.Net自定义控件的生命周期
  7. ubuntu下nginx安装
  8. python 电力系统时域仿真_电力系统暂态计算_时域仿真方法
  9. 局域网传输神器Snapdrop(电脑、手机均可)
  10. vue3子组件调用父组件的方法
  11. 5个促进 OKR 成功的文化准则
  12. 关于ireport中文不显示问题
  13. 软著代办一般需要多少钱?
  14. SWF (Simple Workflow Service)简介
  15. MBA中国网关注:打造最佳团队的5大秘诀
  16. linux编译安装openssl3.0.7
  17. Camera日记(一)-ISP
  18. ty博客后台搭建教程
  19. 接口显示返回值正常,但是拿到的值却是undefined?
  20. Java基础不使用方法重载缺点

热门文章

  1. Discuz!X3.4 全新安装教程
  2. js-面试官想知道你有多理解call,apply,bind-不看后悔系列
  3. android 适配测试,谈Android手机客户端的适配测试
  4. (总结版)Javascript中的类型转换规则 以及 JS加法运算中的类型转换规则
  5. Spring AOP 基本概念
  6. 12月30日热烈欢迎软通动力参观武汉众嵌科技
  7. android调节系统亮度的方法
  8. javaBean构造器
  9. mysql mediumint 长度_mysql中的MEDIUMINT 最大可以是多少
  10. 实在智能RPA机器人:带你走进AI+RPA技术的新世界