粉丝4591获赞2.0万

半亩一点零正式版本发布了,他的中文名叫小面包,官网描述他具有惊人的 javascript 的运行时速度,比 note 结实快五倍,比 deno 快两倍。小面包原声支持接叉、 tsts 等于法,并且自带包管理工具功能。 说这么多,他到底有多快呢?下面我们来实践一下小面包到底有多快。先打开官方文档,帮我们点 sh, 复制安装命令到命令行中,敲击回车键。安装成功后,根据提示我们使用 vscod 打开,点 jshrc 文件中配置环境变量。 接着我们运行 sos, 点 z s h r c, 重新加载一下配置,之后输入半亩杠 v, 打印一下版本号。好了,我们就已经安装成功了。这里需要说明 一下,安装 bom 后不需要像 note 一样,还需要安装一个 npm 包管理工具,因为 bom 自带包管理工具,我们可以直接使用 bom 创建一个项目并安装项目的依赖,这是不是很 nice? 那下面我们就通过 boom 来创建一个项目试试。来到官网,点击创建一个位的项目,复制命令, copy 到命令行中,按下回车键, 我们选择 vue 加 ts 的模板创建项目,看起来运行还是很湿滑的。创建成功后,我们根据提示进入项目执行 bomb instore 安装依赖,依赖安装成功, 我们启动一下项目。好了,成功了,用 bum 开发前端就这么简单, bum 不仅能启动项目,还能直接运行 t s 等待吗?我们来看看 note 是不能运行的,运行汇报不支持 t s 文件错误。通过半亩全局变量,我们还能直接启动一个后端接口服务。 note 则是不支持的,它需要安装 express 或者是 kov 这样的工具才能实现,是不是比 note 方便多了?讲了这么多,下面我们来对比一下棒比 note 到底快了多少。我们重新创建了两个一模一样的项目, 接下来我们一个使用 pm pm 来安装依赖,一个使用 bom 来安装依赖, 我们来对比一下他们的速度差距,安装成功 pm 耗时是三十七点五秒,下面使用棒的安装 放单装用了二十一点六六秒,第一次安装棒的比 note 快了大概小一倍的样子,第一次安装时间主要是浪费在网络请求上,效果不是很明显。 下面我们把两个项目的 note 干 model 删除,再次对比一下。第二次安装都是从缓存读取依赖,对比的是谁操作文件的速度快, pm 耗时一点九秒,浪的耗时八十七毫秒, 办的整整比 pm 快了二十一倍,可见性能方面办的还是具有很大的优势的办的。今天就介绍到这,喜欢的同学赶紧上手小面包开发起来吧!


okay, 呃,那么大家晚上好。呃那今天晚上呢,我们来讲一个比较用的比较多的一个点,就是我们 g s 的点点点符号 啊,这个玩意呢,它的真名叫做扩展运上佛,它是在 e s 六中新增加的内容 啊,它的主要作用呢就是将数组或者子俊在语法层面上打开,注意 主要是语法层面这个大伙我们会叙说,然后呢,呃他对这个 j s 对象也可以在语法层面展开,就是以 key value 的形式, 这样读起来呢,他是有一点深色的啊,我们接下来举几个呃简单易懂的例子,这个东西呢其实在工作当中用的是非常多, 可以说是随处可见啊,但是呢很多人就是包括也有粉丝经常会问我这个东西到底该怎么理解啊?就很多人啊,哪怕很多工作了很多年的呃,程序员就是 看到这个玩意呢,知道他是这么回事啊,也能理解,自己也能写写,但可能就是还是无法从真正的原理上面去透彻的理解这个点啊。那那今天呢,我们就是呃来彻底的把这个玩意呢给他展开来讲一讲啊。 首先第一个步骤啊,概念太复杂了,我们可以这么去理解点点点,我们现在我们就给他正式的命名为展开运算啊,点点点我们就把它命名为展开运算,这样的话呢比较好理解啊,那谁 谁可以用展开运算符来进行展开呢?首先我们这个字符串它是可以展开的,然后展开是什么东西呢啊?我们说它是展开成逗号分割的元素集合,注意这个也是从语法层面来讲的好,我们来举一个例子,比如说呢,这边 定一个 str 啊,定一个 str 等于字符串的 a、 b、 c, 那现在我要去对这个字符串进行一个展开,它是什么意思啊?啊?我们直接来写代码, 当我这么去写的话啊,得到的是什么玩意啊?我们先看一下结果,好吧, 结果呢是 a、 b、 c。 其实啊,其实我们这个东西呢,他就是从语法层面上把字符串给他做了一次展开,他就相当于啊,我们看一下相当于是什么东西呢?相当于就是我们这边写一个 a, 对吧?然后写一个 b 逗号,再写一个 c, 哎,这两种语法这是一样的,这个就叫做从语法层面上展开,怎么展开?就是把里面的每一个元素单独的排开,然后用逗号进行分割啊,就是这么个意思啊, 好,来验证,我们验证一下这个代码是不是正确的呢?正确啊,正确, a、 b、 c、 a、 b、 c 都是一样的,这个就是 从语法层面上对字符串进行一个展开操作。 ok, 我们来看第二个点, 除了制服串还有什么东西可以展开啊?首先我们这边卖一个关子啊,那制服串可以展开,那么很容易,我们会想到啊,就是还有一个什么东西跟制服串有点像啊?就是不能说像吧?就是可以被迭代的,大家好好 呃,体会一下我这个说法,就是什么东西可以被迭代,那字不串他是可以被叠加的嘛?哎,就是一个字不串,他有,呃,他每一个元素都是可以单独的被拿出来的,那么我们很容易就可以想到什么。 还有一个就是一个,呃,竖屏对不对?还有一个竖屏啊,我们把这个删掉。 let a r r 等于一个数组啊,然后呢有三个元素,一二三,非常简单,那我去展开一个数组,按照刚才的这个说法啊,展开数组,他也是从语法层面上进行一个展开啊,那么我们来 console 这样 log, 怎么叫从语语法层面呢?就是我们去点点点, a r r, 从语法层面上展开,就是什么意思呢?就相当于啊,相当于就是把里面的元素一逗号分割二,在逗号分割三, 哎,就相当于写了这么个东西,就是点点点 a r r 就相当于是什么呢?相当于是呃,把里面的东西的从语法上面上传,就是一二三,好,我们看一下 是不是这么回事呢? 一二三没问题吧?这就是从语法层面上整开 好。那什么样的东西可以用点点点呢?我们说了他是用迭代啊,就是所有能够被迭代的东西都可以用我们的展开运算佛点点点 进行展开,而且展开的东西呢,它是语法层面的,比如说这个数组它是不是可以被迭代?那我们来一个 for 循环 account index, 然后 in air 啊,然后这边呢,我们来一个 console 点 log a r r 中括号 index, 速度是可以被迭代的, 这个没有问题,一二三叠带了,对吧?那我们说字符串呢,它也是可以被叠开的。 let s t r 还是这个 s t r, 我们给它来一个 a b c 啊,这个字不串呢,它也是可以被叠带的啊,啊,然后 cons index in s t r 啊,这个呢就改成 s t r, 看效果 好听一下,一二三, a b c 是不是啊?所以呢,所有能被迭代的东西他都可以用展开运算符点点点。 哎,那我们再问一下,就是 number, number 类型, number 等于一百,这个东西它能用点点点吗?点点点,那可以吗? 报错了,对吧?报错了,为什么?因为 number 它不能够被迭代,我们没有任何办法可以用。呃,就是又通过复循环呢去迭代我们的 number 类型,那这边,呃,它也是,你看 must have a symbol and territor, 你看它是不能够被迭代的,不能被迭代,所以就不能用我们的点点点,因为它从语法层面也是展开不了,这个就是我们要说的关于点点点的第二个。 好,接下来我们来讲第三个,就是展开的内容呢,它可以放在任何它可以存在的地方。 什么意思啊?展开的内容它可以放在任何它可以存在地方。刚才我们已经说了,点点点呢,它是从语法层面展开的,展开了什么东西呢?展开成了一段用逗号分割的代码,用逗号, 那么从语法层面上讲,就是这一串用逗号风格的代码能够放在什么地方?那么展开的东西也可以放在什么地方啊?那思考一下,我们在什么地方能够写类似于一逗号二逗号三的东西? 那最先想到的那还是数组这种吧,因为他实在是太常见了啊,太常见了啊,那么假如说我现在啊,现在我去 这边不要,那这是一个数组,然后一二三,那么我现在呢?要去,呃,对他做一个迭代,我点点点 a 二二,他就相当于是一逗号二,逗号三,那么他是不是也可以直接放在一个数组里面, 就是一逗号二逗号三,这个玩意呢,我们放在数独里面,这个从语法层面上讲是对的,对不对?那么既然我们用点点点展开,哎,就相 相当于写了这么一串代码,那么我们是不是也可以这么写?那我们这么写的话,是不是一点问题都没有?浏览器也不会有任何的意见,对吧?好,我们看一下结果啊, 那现在他得到了就是这么一个数,这就是啊,我们讲的 展开的内容呢,可以放在任何它可以存在的地方, 那么除了数组还有什么地方可以这样写呢?就是用一,就是什么逗号,什么这样的方式,很容易想到的就是函数吧,对不对啊?比如说我们这边呢,给他写一个 function, function, 来一个 a、 d, d, 然后这边的话呢,我, 我们来一个 a、 b, c, 对吧?然后这边 log a 加 b 加 c, 哎,我们写这样的一个方法是不是没有什么问题?好,那么我这个传差,我们以前我们是不是可以这么写?一二三,好,那现在因为我们有这个点点点,哎,那么我们是不是也可以 直接点点点 a r r, 就相当于我们把这个东西呢填在了这里,也是从语法层面来讲, 所以我们这么写是一点问题都没有,浏览器也没有什么意见啊,浏览器也很开心,好,我们也很开心,因为他从语法上讲他是可以的。好,我们看一下结果, 除了六没有问题啊,没有问题啊,这个就是我们需要好好的理解的一个点啊,就是展开的内容呢,它可以放在任何它可以存在的地方啊,相信浏览器是没有什么意见。 好。第四个对象也可以展开哦。为什么对象可以展开?因为对象啊也是可以被便利的,我们可以通过或循环啊。呃也去便利一下这个对象, 那对象展开是什么呢啊?它就是一个 key value 的形式,也是用逗号分割的啊。我们具体来看一个例子 定一个对象然后叫 k k 啊然后 name 等于这个 age 等于十二岁啊这是我们定义的一个简单的对象啊。那么当我们去呃这样子写啊这样子写你觉得可以吗? 你觉得可以吗我们这样子写它从语法层面上讲呃它是不是可行的它能够打印出呃。 name 等于 qq a 就等于十二吗?啊假如说你觉得可以啊就把一打在公屏上假如你觉得不可以啊那么就把二打在公屏上啊。 我们来看一下结果好报错 错了。嗯报错了肯定会报错。为什么会报错?因为我们再三已经强调了就是点点点呢?他是从语法层面呃将一个可以变利的东西展开 啊。那么我们这么写就相当于什么呢?就相当于把这个玩意是不是写在这个地方啊。那么刚才如果你打的是二啊,那么请你告诉我这个是什么玩意 对不对?那肯定就不对吧,是不是啊。那我们要从语法层面上纠正这个写法最简单的方式是不是就加一个大括号 哎这样子是不是从语法层面上想它是对的啊那么这个东西我们也就没有必要这么写了而是还是写成点点点 k k 啊,这样子是不是就可以了。所以说一定要注意啊,这是一个很容易犯错的地方,好,来看好,现在我们这个结果就是对的,对吧? 好,呃,那我们刚才这个做法就相当于把一个对象先点点点展开,然后呢又有个对象把它给装起来,这好像,呃,就是先把它扒了,然后,哎,又给它组装起来,好像没有什么意思,对不对? 那其实啊,其实这个是什么呢?就是我们呃,这个点点点的一个精华所在啊,就是在对象的应用的精华呢,是用来做属性的混露的啊?什么叫属性的混露呢?就比如说现在这个 k k, 它有 name 和 age, 那它还没有 那个,然后我们要给他加一个属性 hobby 来。怎么加?哎,那我们就可以用这个混读的方式,就是直接在这里呢给他加一个逗号,然后 啊,比如说我们直接给他呃点点点,然后又加一个对象,然后这个对象里面呢有一个 hobbies 的 poppy, 比如说是学习,说的我自己都信了。啊。啊,那这样子行不行? 假如你觉得可以呢,就把一打在公屏上。假如你觉得不可以呢,就把二打在公屏上。 ok, 那我们来看结果啊,结果当然是可以的,为什。


搬砖啦,今天来共享一下介字中的博瑞克和 ctrl, 很多小伙伴学到这一块,感觉没办法很好的去区分,对吧?其实这一块也很简单啊, 我们今天通过一个小实力来给大家具体的去说一下,布瑞克和肯定有他们之间的区别,以及我们如何在代码里面去使用。首先咱们先通过一个例子吧,我们有这样一个需求,也就是点击按钮之后 让他去触发 gs 实践这个 gs 事件呢,我们会让他挨个去输出,比如说有中间不想输出的,我们就让他去跳过,那跳过的这个过程就是不瑞克或者是肯听力的一个作用, 听起来不是太明白的,好,咱们直接实力去演示一下,我们要点击按钮触发事件,是不是咱们先要有一个按钮对不对? 好,这个跟咱们前面 h 签名里面讲到的是一模一样的,这个里面名字你随意去取,除了这一块,像这个写法他是默认的一种写法,也就是点击按钮去出发事件,就是出发的啊,看林肯事件 这个里面给他带一个名字,这个后面呢,你就是页面中用户去看到的,对不对啊?那我们可以跟用户说好,点击 点击按钮这块写好了之后,我们想点击按钮之后把输出的内容给用户去看,也就是我们要展示在页面中,那可以给他展示在皮标签里面,来给他一个 id, 这里能看明白,对吧?其实这个很简单,对不对啊?那我们在介思里面怎么样去写呢?因为这一块是 h t m l, 这一块是 解释,想让他们之间有关联,肯定要通过他,对不对啊?那我们刚才一个需求是点击按钮让他去触发解释事件,那把它拿过来,事件,一个事件就是一个放绳, 好,这样去写,写完了之后,但是你看,哎,这个地方我们是触发的方式,方式有什么呀?有括号对不对?你这个地方一定要记得给他加上括号,这个千万不能丢啊,这样他才会去触发这样的一个。 咱们就是去测试一下啊, 也就是我们刚才说到的,哎,点击这个按钮之后 出现我们要打印出来的这个,这没问题吧?啊?也就是点击他能去出 刷到他,对不对?但是这个里面呢?我们不想这样去写,我们需要怎么样去写呢?我们需要从一输出到三,那输出内容是不是要用到放循环?放循环我们需要从二从零开始,对吧?那我们还需要二给他一个界限, 那随便来一个吧,比如说小一个十,好,那每次都需要按加加加一,这个之前讲过的,对不对啊?那要让他去输出呢?比如我们就放在一个变量里面吧,好,这里来给他一个 x 变量, 这个里面就直接来给他一个 x, 等于啊, x 加上一个,比如我们要给他一个提示,对吧? 是多少?是当前的一个爱,但每次输出完成之后,我们需要让他, 哎,换哈,这样看了能够更清楚一些,是不是应该这样去写好,写完了之后我们想要打印给用户去看,咱们直接啊 输出到页面上吧,输出页面上是不是可以直接输出到当前的 p 标签里面?你看这个地方我们通过 id 去找的,是不是直接这样去写就行了?那需要在这个里面去追加内容,是不是英的 h t m 这个数据来源于哪里啊?是不是当前的一个 x, 也就是我们需要输出这样的一句内容,来看一下 点击按钮,这个时候他从零直接输出到九,没问题,对不对?但这个时候又来一个需求,他的需求说当前,哎,这个三步输出,其余的都输出, 哎,小伙伴说了,那这个怎么实现?很难是不是?那今天我们就需要通过这个主角刚才有一个需求是说的只需要三步出现,其余的都要出现,那我们怎么样去写? 需要去判断一下对不对?判断在哪里写,肯定要在这个里面去写,因为他从这里便利的吗?对不对?你,你写的写在这个地方行不行? 不行,对吧?他这个地方都已经便利完了,你这个地方就直接输出了,你在这里怎么能判断呢?不行,只能在这里面去判断, 那判断的是我们判断的是谁的值啊?是爱的值,对不对啊?那如果爱等于三的时候,我们就怎么样不让他输出?那在这里我们是要添加哪一个呢?是用布瑞克呢?还是用肯定呢?好,我们先来试一下, 肯定有给他放进来,就这样去用,非常简单,对吧?他也是一个关键词啊。直接来刷新看一下, 点击按钮,零一二,是不是三没有被输出,对不对?哎,这个符合咱们当前那个需求了,是吧?好,那我们再来去看,如果把它换成布瑞克呢?我们这里就是要去区分一下布瑞克和肯定的一个区别,对不对?好,刷新看一下, 哎,这个时候他是三之后的都没有被输出,能理解了吧?那我们以此就可以直接知道博瑞克和肯听力的一个区别, 肯听牛是只会跳出当前这一次的判断,后续的他会直接去继续执行,而不瑞可能是直接跳出当前的 报修的话,他就不去执行了。其实这一块咱们再看一下啊,调试的时候非常简单, 我们在这里可以给他打一个锻炼, 紧接着点击一下按钮,监控起来之后啊,先让他一步一步往下去走,先来看一下一个布瑞克, 这是二等于零,对不对?好,紧接着呢,输出的是零,这个地方没有问题,我们输出是第一条,对吧? 紧接着我们再来看啊,符合这条件啊,直接去走,再来看啊,符合这个条件啊,为二还可以被输出,对吧?好,当他执行到 i 三的时候,仔细看啊。哎,这个时候他就不瑞跳出了,跳出哪里? 跳出了这里的?所以听,通过调试,咱们可以非常清晰的他是怎么样去执行这些代码的。那我们再来看一下啃金牛,刷新来看一下, 这个跟刚才咱们那个区别就非常大了啊,把这一块停止一下。好,那我们还从这里去打断点,然后再紧接着去看一下 这块,咱们就走的快一点,跟刚才那个是一样的,前面三个到二这里都是一模一样的,对不对? 好,这时候二等于三,仔细来看,当二等于三的时候,他要执行这样的一个判断条件,也就是应付语句。当二等于等于三的时候,哎,他执行了一个肯定定,他一看,哎,这个地方是肯定不是不会, 对不对?好,肯听令他会怎么样去执行呢?哎,他紧接着又去按加加了,他没去管他对不对啊?也就是说啊,你这个地方是肯听令了啊,那我就放过你一次,我再去执行后面的,你看他紧接着按加加之后,哎,哎,等于四,判断一下等不等于四不等于,对不对啊? 会继续去输出。好,紧接着再来看啊,阿姨,加加加加,之后再来去判断一下这个条件符合啊,一看阿姨等于五,符不符合,这个条件不符合,所以这个衣服语句不需要去走,对吧? 好,你看后面都是 ok, 都是以此类推啊。通过刚才我们调试这样的一个代码走的这样的一个过程,是不是非常清晰的知道了不瑞可和肯听令的区别。其实你可以理解为肯听令他的范围比较小,不瑞克范围范围非常大, 如果是你当前只是说我有这么一个小的需求,二等于三我不让他输出,其余的我都要,那你就肯定有,如果是说我二等于三之后,所有的我都不让他去执行,那你就直接补一课就可以了。



bun 1.0 is finally here bun is a complete toolkit for building running testing and debugging javascript and typeship from a small script to a full stack server side rendered application you'll see how bun can make your life as a developer more productive, less, frustrating and most importantly more fun let's jump in bun exists for a simple reason javascript is too complicated now some of this complexity is warranted the javascript ecosystem is popular and it's mature and there's a lot of great tools out there and that's great but in other ways things have just gotten unnecessarily complicated our repos have a thousand node modules and half a dozen configuration files with plug ins and adapters to get everything to play nice together most code we write has to be passed through opaque build system of transpilers and bundler plugins before it's in a form that can actually be executed by no js and to top it off we're in the middle of a years long and very painful transition between common js and es modules each of which comes with different syntax and module resolution rules bun eliminates unnecessary complexity without throwing away everything that's great about javascript the ecosystem, the conventions, the libraries and the frameworks that we all know and love there are a lot of tools in the bun tool kit, but the crown jewel is the bun runtime bun is a drop in replacement for no js that's backwards compatible and can run type script and tsx files no dependencies necessary, but most importantly it's fast now let's start small if we run a simple hello world script it takes bun only eight milliseconds in no js it takes three two that's a four x difference just to say hello and if we're running type script things get a little trickier we need to transfile our typescript file before we can even run it with es build the time to build and run takes about forty milliseconds with tsx that's a hundred and twenty and with tsc it's three hundred and fifty that's forty five times slower than bun now of course you're rarely running scripts directly with node you'll usually use a command like mpm run dev to run your dev script with bun, you can replace any mpm run command with bun run instead on a macbook pro it takes mpm about 150 milliseconds to start running a script in bun it takes just 30 mpm feels noticeably laggy whereas bun feels instantaneous performance marines a key guiding principle for buns designed, but since we're already building a new runtime we figured we might as well bake some features into bun to make your life easier as a developer we've mentioned typescript in jsx support already these work out of the box with bun there's new dependencies required in bun both common js and es modules are supported and they work all the time developers have wasted way too much time worrying about incompatibility between common js versus esm with bun they both just work in fact you can import and require in the same file bun has support for hot reloading using dash dash hot when hot reloading is enabled you edit a file and will reload your code without restarting the process in this example, bun is running a web socket server when bun hot reloads the note is reloaded, but the connection stays alive this way your application updates instantaneously without losing state button also has a plug in api that lets you define custom loaders you can extend the bun runtime to support things like emo imports it uses an api that is inspired from es build which means many es build plugins just work in bon one bun enthusiast even wrote a plugin that lets you import rust files in your javascript the imported rust file gets compiled on the fly and called using buns ffi api bun has baked in apis for the things you need most as a developer now for example if you want to read a file, you can just use bun file bun file returns a file object it has the same properties as the file api in browsers, but more importantly this allows bun to lazily load file only when you need it when you're ready to read the content of a file the object gives you a handful of useful methods for rendering in different formats if you've used browser apis before this pattern looks very familiar writing files is also really easy use the bun right api to write pretty much anything to disk a string file buffer you can even use an http request bun writes three times faster than no js and reads files up to ten times faster use bun serve to easily spin up an http server bun serve is based on web apis like requesting response this server can handle four times more request per second than the equivalent in no js and what about web sockets bun server is highly optimized for mess throughput bun can handle 1 million messages per second which outperforms the equivalent nojs package by a factor of 5 bun also exposes a publishing subscribe api for web sockets this allows you to easily broadcast messages to certain topics with the same performance as if you were doing it in native code, bun has built in hashing it even has support for password hashing using b crypton argon, and that is just the tip of the iceberg when it comes to buns apis bun is a drop in replacement for no js and it implements around 40 of nodes built in modules at this point certain rarely use modules like degram and inspector are not yet implemented others like the v8 module exposed details of no js's internal v8 engine which does not apply to bun which is based on web kit ultimately we're taking a very pragmatic approach to nojs compatibility and focusing on the apis that are actually useful to developers so if you have an api server implemented with something like hono express or coa it'll just work so we'll 99 of full stack applications including anything built with a major framework like next js remix the astro and nuxt of course before you get started with any of those frameworks you'll need to install dependencies that's why bun is not just a runtime but is a no js compatible package manager it's a familiar experience to anyone who's used a package manager before, but trust me you've never seen a package manager this fast on our latest benchmark bun installs your packages 29 times faster than npm and 17 times faster than pnpm bun is careful to avoid unnecessary network calls when resolving versions are downloading code, but also uses the fastest available system calls on each operating system to copy hundreds of thousands of files in a fast and scaleable way keep in mind bun can be used as a package manager entirely independent of the bun runtime functionally it behaves identically to npm, yarn and pnpm it's just faster it reads your package json downloads packages from a registry and installs them into your node modules folder where they can be discovered later by bun or node js bun also supports all the features you'd expect from your package manager things like workspaces custom registries get dependencies local package linking the works though when you're waiting for your ci most of the time isn't spent in solving dependencies it's been running your tests that's why bun is also an incredibly fast test runner bun provides a familiar just compatible api import the usual functions like test expect and mock from the bun test module you get all the benefits of the bun run time out of the gate like type script and jsx top level away esm support no need for a plug in like ts, jest it just works we benchmark jest vitest and bun against the test suite for the scheme of validation library zod, bun was eight times faster than the runner up by test and thirteen times faster than jest even when it was using s w c for transpiling well buns expect mattress are implemented in highly optimized native code where in jest it has to be compared in javascript this means that buns implementation of expect our two equal is 100 times faster than just bun is ready to use today to install it and github actions use the official setup bun action if you're looking to deploy an application check out the official docker image and to install it on your local machine with a single command head to bun sh for instructions thanks for joining us to celebrate this major milestone it's been incredible to see bun as a community grow over the past two years, so thank you to everyone on discord and twitter who've been falling along and to our over 300 contributors but this is just the beginning we're working on a new way to deploy javascript and typescript to production and we're hiring low level system engineers if you want to help us build the future of javascript, you can also join us on our discord server you'll get a sneak peek at what we're working on next and it's a great way to get a quick feedback or support for your projects so that's it bun 1.0 is here and we're just getting started。