使用PReact或其他框架的苗条行为

问题描述

如果我在svelte项目中导入使用PReact或其他框架的JavaScript包,svelte会编译吗?

svelte会使用它编译PReact框架和软件包吗?由于PReact很小,svelte会编译它,因此不应导致任何性能问题或规模问题。

但是我的问题仍然是,当我在svelte项目中使用PReact框架时,它会编译吗?因为如果这样的话,最好排除它(不编译)还是不在乎呢?我想知道最佳做法。

编辑:

我正在导入一个完整的应用程序FullCalendar

解决方法

Svelte是一种编译器,从某种意义上来说,它占用.svelte个文件并将它们转换为.js(至少在概念上)。在通过捆绑程序插件或其他方式(例如,直接通过编译器API)运行编译器之后,最终得到的JS代码不依赖于要运行的完整运行时(我们可以称其为“低级” “从框架的角度来看JS)。

另外说:Svelte的编译仅专注于将Svelte语法(在.svelte文件中找到)转换为“原始” Javascript。

Svelte编译器不了解.svelte文件之外的其余代码,例如,代码库中.js文件中的内容,或者与您的问题有关的内容其他库,例如Preact。从编译器的角度来看,它们只是从外部导入的,最后它们只是Svelte代码中的变量。

因此,您的问题的答案是:不,Svelte不会编译Preact或任何非Svelte语法的东西。

解决外部导入将对您的浏览器(如果使用原始ES导入)或更常见的捆绑程序(例如Rollup,Webpack ...)造成问题。打包程序将读取您的导入语句,尝试在node_modules中解析它们,重写所有内容以使其一起运行,还可以选择应用一些代码转换(例如将TS,SCSS或Svelte转换为原始JS),对其进行优化,将它们包装在一起以获得最佳性能,等等。Svelte在这方面没有任何改变。

从个人角度来看,在Svelte中使用Preact似乎没有多大意义。本质上,您已经拥有Svelte中Preact中的所有功能。在我看来,相反的做法似乎更合乎逻辑-在现有应用程序中使用另一种技术使用一些“框架无关”(一旦编译)的Svelte组件。