当前位置: 首页 > Web前端 > HTML

Rollup作者新作:SvelteCubed,拥抱Three.js!

时间:2023-03-28 11:43:41 HTML

2021年11月20日,Svelte举行了第四次虚拟会议。会议中最让人耳目一新的当然是Rich-Harris带来的SvelteCubed。科普:轮哥Rich-Harris:Svelte,Rollup这个项目的作者不是因为其他音箱不好,也不是因为轮哥是Svelte的作者。因为他带来的Svelte-Cubed和我现在在公司负责项目的技术栈感觉很像。因为公司需要开发一个新的H5项目,所以我采用了比较激进的组合Svelte+Aframe/Three.js+Tailwind.css+Vite。整套组合之后,无论是开发体验还是最终制作包的体积都非常精彩~所以当看到轮子哥发布这个新轮子的时候,激动万分,居然直接把自己想要的组合集成到了Svelte中。那么我们来看看Svelte-Cubed的样子:打开https://svelte-cubed.vercel.app/,目前官网并没有使用自定义域名,而是直接使用了Vercel的域名,猜测是跟轮哥去Vercel工作有关系。看官方cubed的一些例子:自己尝试写一个项目,先初始化一个svelte项目npminitsvelte@nextmy-new-appcdmy-new-appnpminstallnpmrundevinstallThree.js和svelte-cubednpminstallthreesvelte-cubed如果使用TypeScript,还需要引入Three.js的ts声明npminstall-D@types/threeopensrc/routes/index.svelte然后运行npmrundev报错。通过查询,大概是因为没有设置vite选项。打开svelte.config.js,添加关旭vitessr的选项即可解决。从'@sveltejs/adapter-auto'导入适配器;/**@type{import('@sveltejs/kit').Config}*/constconfig={kit:{adapter:adapter(),//hydratesrc/app.html中的元素target:'#svelte',vite:{ssr:{noExternal:["three"]}}}};导出默认配置;我们的项目将运行起来。官方也明确表示不会包装Three.js对象,而是直接使用Three.js创建和设置对象,所以代码中引入Three.js是很有必要的。从其他非数据驱动的Three.js项目到Svelte-cubed的成本效益迁移)。可以看出,如果使用纯Three.js写代码,内容会比Svelte-Cubed多几倍。随着时间的推移,命令式代码也变得更难维护。通过添加控制器,我们可以轻松交互。打开src/routes/index.svelte+利用Svelte的数据驱动轻松修改Three.jsObjects.+<divclass="controls">++++

++使用数据驱动,也可以快速添加动画<脚本>从“三”导入*为三;从“svelte-cubed”导入*作为SC;让宽度=1;让高度=1;letdepth=1;++letspin=0;++SC.onFrame(()=>{+spin+=0.01;+});总结然而,随着Svelte-Cubed的发布,也有很多质疑,有人认为这个东西并没有真正“创造新事物”,只是写了一些Glue层代码。RH本人也做出了回应简而言之,您使用SvelteCubed的原因与您使用Svelte(或任何组件框架)本身的原因相同:声明式代码往往比命令式代码更健壮、可读和可维护。直接使用Three绝对没有错,但这相当于直接使用DOM。在某种程度上,很难跟踪未表示为层次结构的层次关系,并且管理整个应用程序的状态成为一种负担。此外,由于组件具有可管理的生命周期,如果您使用像Vite这样的框架(或使用Vite的SvelteKit),您可以“免费”获得热模块重新加载之类的东西。一旦您尝试过以这种方式构建场景(例如,在调整正在放大的对象的属性时保持相机位置),Cmd-R驱动的开发会感觉非常苍白。——译自deepl.com补充说明:声明式和函数式的区别,以创建div为例:1.声明式写法
2.函数式写法document.createElement('div');不过个人认为,Svelte-Cubed带来了以下优势:1.声明式风格带来的层次清晰;2.数据驱动可以带来遍历(写起来比Three.js快多了);体积还是很小的(相比React和Vue,需要引入一整套runtime),既然Svelte-Cubed集成了Three.js,在meta概念兴起的时代,会不会离VR/增强现实?(其实只要集成了Three.js,利用Three.js生态写VR是非常简单的。)最后再罗列几个VR/AR领域比较优秀的框架(如果有兴趣的话在这方面)、aframe(类似Svelte的声明式风格)、react-three-fiber、babylon.js。参考https://twitter.com/opensas/s...https://twitter.com/SvelteSoc...https://svelte-cubed.vercel.a...https://github.com/Rich-Harri...https://news.ycombinator.com/...结语??关注+点赞+收藏+评论+转发??,原创不易,鼓励作者创作更好的文章,关注公众号秋风的笔记,一个前端公众号专注于前端面试,工程,开源

猜你喜欢