支持 Top Level Await,Rust Farm v1.1.0 发布

⭐️Farm v1.1.0 支持了 Top Level AwaitNode 懒编译 等新特性,并修复了部分 Bug。

不了解 Farm?参考

一、新特性

1.1 Top Level Await

Farm 从 v1.1.0 开始支持 top level await,开箱即用,无需任何额外配置。 请注意,top level await 仅适用于**原生支持async/await的浏览器,当针对旧版浏览器时,使用 top level await 将引发运行时错误。

使用示例:

ts 复制代码
// data.json
[1, 2, 3]

// data.ts
const data = await import('./data.json');
// 使用顶层 await
export default await Promise.resolve(data.default);

// index.ts
import data from './data.ts'; // 直接 import 异步模块
console.log(data); // [1, 2, 3]

Farm 在 v1.1.0 中引入了 异步模块(async module) 的概念,使用 top-level wait 的模块将成为 异步模块,静态导入 异步模块 的模块也将是 异步模块。 对于上面的示例:data.ts异步模块,因为它使用了 top level awaitindex.ts 也是 异步模块,因为它静态导入 异步模块 data.ts

Farm top level await 完全按照 top level await 的规范实现,包括编译时和运行时两部分都进行了支持

对于没有使用 top level await 的项目,所有模块都是 同步模块(sync module),编译产物跟之前比不会有任何差异。

async module 是 Farm 内部的概念,一般用户不会关心它,但是对于运行时插件作者来说,如果想扩展 farm 模块系统,可能需要注意模块的执行可能是异步的

1.2 Node 懒编译

之前 懒编译 仅适用于浏览器,从 v1.1.0 开始,在 targetEnvnode 时也可以使用 懒编译。 Node 的懒编译可以大大提升 SSR Node 侧编译性能,例如,如果有多个动态路由,那么这些动态路由的代码直到执行时才会进行编译,能大大减少大型项目的编译时间,提升开发体验。

例子:

ts 复制代码
// dynamic.ts
export const a = 'aaa';

// index.ts
console.log('script start');

import('./dynamic.js').then((mod) => {
  console.log('111' + mod.a);
});

在上面的例子中,只有当执行 index.ts时,dynamic.ts 才会被编译。

1.3 swc_core 更新到 v0.90

swc_corev0.88更新为0.90,修复了一些 SWC 底层的 bug。如果您使用了 SWC 插件,请确保该插件与swc_core v0.90 兼容。

二、Bug 修复

2.1 lib 构建不再注入 polyfill

对于 library 的构建,polyfill 应由上层 APP 来进行处理,因此 v1.1.0 开始,不再对 library 注入 polyfill.

ts 复制代码
export default defineConfig({
    compilation: {
        input: { index: './index.ts' }
    }
});

在上面的配置中,Farm 不再为 ./index.ts 注入 polyfill。

修复随机的 cache panic

由于并发问题,频繁保存时,可能会出现如下 cache 导致的 panic:

文本 复制代码
thread '<unnamed>' panicked at crates\plugin_runtime\src\render_resource_pot\mod.rs:307:12:
failed to write resource pot to runtime object cache: Os { code: 2, kind: NotFound, message: "系统找不到指定的文件。" }

v1.1.0 修复了该问题

Changelog

Minor

  • 71b6bab7:壮举:当条目不是 html 时禁用 polyfill
  • ef1b39bc:支持 Top level await
  • 86d17342:将 SWC 核心版本提升至 v0.90

Patch

  • 3581ee5e:支持针对节点时的延迟编译
  • 4e8ebbcc:支持cli根路径选项
  • 更新了依赖项 ef1b39bc
    • @farmfe/runtime@0.11.0
    • @farmfe/runtime-plugin-hmr@3.5.1
    • @farmfe/runtime-plugin-import-meta@0.2.0
相关推荐
Dr_哈哈3 分钟前
Node.js fs 与 path 完全指南
前端
啊花是条龙8 分钟前
《产品经理说“Tool 分组要一条会渐变的彩虹轴,还要能 zoom!”——我 3 步把它拆成 1024 个像素》
前端·javascript·echarts
C_心欲无痕9 分钟前
css - 使用@media print:打印完美网页
前端·css
superman超哥22 分钟前
Rust 移动语义(Move Semantics)的工作原理:零成本所有权转移的深度解析
开发语言·后端·rust·工作原理·深度解析·rust移动语义·move semantics
青茶36024 分钟前
【js教程】如何用jq的js方法获取url链接上的参数值?
开发语言·前端·javascript
_loehuang_31 分钟前
【mole】Mole User 开源用户中心:一站式身份认证与权限管理解决方案
spring boot·nacos·开源·用户中心·mole
superman超哥34 分钟前
Rust 所有权转移在函数调用中的表现:编译期保证的零成本抽象
开发语言·后端·rust·函数调用·零成本抽象·rust所有权转移
脩衜者39 分钟前
极其灵活且敏捷的WPF组态控件ConPipe 2026
前端·物联网·ui·wpf
cchjyq41 分钟前
嵌入式按键调参:简洁接口轻松调参(ADC FLASH 按键 屏幕参数显示)
c语言·c++·单片机·mcu·开源·开源软件
Mike_jia44 分钟前
Dockge:轻量开源的 Docker 编排革命,让容器管理回归优雅
前端