Tea.xyz: 一个去中心化模式的激励开源社区,Homebrew 作者建立
公众号关注 「奇妙的 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 作者建立相关推荐
- Redis集群——去中心化模式
去中心化模式特点 之前介绍的主从模式和哨兵模式都只有一个master主节点,如果写操作并发比较大时,这两个模式就会堵塞.这时就可以使用集群化模式,也称之为去中心化模式,其特点是多master和多sla ...
- 独立站 “ 去中心化 ” 模式崛起,席卷跨境企业转型浪潮
一:独立站趋势 今年以来,受疫情全球蔓延.地缘政治等因素的影响,逆全球化趋势明显,外贸行业面临巨大挑战.大量企业面临订单下降.物流通道不畅.资金紧张.供应链阻断等压力. 而从需求端来看:去中心化的社交 ...
- 一个去中心化的数据中心操作系统模型
目录 前言 3.一个去中心化的数据中心操作系统模型 3.1定义和概念 3.2要求 3.2.1效率要求 3.2.2安全要求 3.2.3其他要求 3.3分布式对象 3.4资源命名 3.5资源管理 3.6永 ...
- C语言宠物领养系统,开发一个去中心化应用Dapp-宠物领养
1. 参考资料 http://truffleframework.com/tutorials/pet-shop 这是一个使用以太坊开发的完整的去中心化应用(Dapp),出自tuffle suite. P ...
- 区块链开发实战:如何从零打造一个去中心化应用
编译 | 区块链大本营 整理 | reason_W 区块链会是一场革命吗? 今天,很多成功的互联网企业都是在以中介者的形式存在.比如Google--你和互联网之间的中介,比如亚马逊--买家和卖家之间的 ...
- 一个去中心化的免费电子书共享网站 JS解码URL和编码URL
原文链接: 一个去中心化的免费电子书共享网站 JS解码URL和编码URL 上一篇: js 一个神奇的尾递归优化 下一篇: Firefox 特性 svg mask 和clip-path的区别 https ...
- 还记得当年的百度贴吧吗? 今天, 有人写了一个去中心化的...
来源 | Embark 编译 | 王国玺 责编 | 乔治 出品 | 区块链大本营(blockchain_camp) 今天科技圈最大的新闻莫过于百度李彦宏被"浇水"一事了,微博.微信 ...
- 如何构建一个去中心化自治组织产品(DAO)?
一.底层逻辑 陈菜根说的一级市场贫瘠,谈二级市场等同于诈骗,了解经济学我们就知道,这其实是母庸置疑的事实. 也就是说二级市场是依托于有真实价值的一级市场的,如果金融要去中心化,那么一级市场必须要先去中 ...
- GPS:一个去中心化的抽奖式Token Offering模型
随着区块链行业的逐渐理性化,大量Token Fund和散户投资者对区块链项目心存戒备.究其原因,主要是由于传统的Token Offering存在以下弊端: 第一,项目团队拥有特权,滥用甚至侵吞投资者资 ...
最新文章
- mysql远程访问,修改root密码
- Maven命令行使用:mvn clean install(安装)
- 天空之城 matlab,[转载]matlab演奏《天空之城》代码
- 导出配置_Lua配置表导出优化
- 单页web应用是什么?它又会给传统网站带来哪些好处?
- 理解Asp.Net自定义控件的生命周期
- ubuntu下nginx安装
- python 电力系统时域仿真_电力系统暂态计算_时域仿真方法
- 局域网传输神器Snapdrop(电脑、手机均可)
- vue3子组件调用父组件的方法
- 5个促进 OKR 成功的文化准则
- 关于ireport中文不显示问题
- 软著代办一般需要多少钱?
- SWF (Simple Workflow Service)简介
- MBA中国网关注:打造最佳团队的5大秘诀
- linux编译安装openssl3.0.7
- Camera日记(一)-ISP
- ty博客后台搭建教程
- 接口显示返回值正常,但是拿到的值却是undefined?
- Java基础不使用方法重载缺点
热门文章
- Discuz!X3.4 全新安装教程
- js-面试官想知道你有多理解call,apply,bind-不看后悔系列
- android 适配测试,谈Android手机客户端的适配测试
- (总结版)Javascript中的类型转换规则 以及 JS加法运算中的类型转换规则
- Spring AOP 基本概念
- 12月30日热烈欢迎软通动力参观武汉众嵌科技
- android调节系统亮度的方法
- javaBean构造器
- mysql mediumint 长度_mysql中的MEDIUMINT 最大可以是多少
- 实在智能RPA机器人:带你走进AI+RPA技术的新世界