You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Vite为含顶级await的TypeScript用户脚本构建async iife?

解决Vite构建带顶级await的Async IIFE用户脚本问题

因为Vite默认的iife格式不支持直接生成async IIFE,你可以通过两种简单方式处理:

方法一:入口文件手动包裹Async IIFE

直接在你的TypeScript入口文件(比如src/main.ts)里,把所有代码包裹进一个自执行的async函数:

(async () => {
  // 这里写你的所有代码,包括使用顶级await的逻辑
  const res = await fetch('https://example.com/api/data');
  const data = await res.json();
  
  // 用户脚本核心逻辑
  console.log('用户脚本运行中:', data);
})();

然后保持Vite的build配置不变:

// vite.config.ts
import { defineConfig } from 'vite';

export default defineConfig({
  build: {
    lib: {
      entry: 'src/main.ts',
      formats: ['iife'],
      fileName: () => 'userscript.js',
    },
  },
});

Vite打包后会把这个async IIFE作为整体输出,完全满足用户脚本独立运行的需求。

方法二:通过Vite Rollup配置自定义输出

如果你不想在入口文件里手动包裹,可以通过Rollup的输出配置来添加async IIFE的包裹层:

// vite.config.ts
import { defineConfig } from 'vite';

export default defineConfig({
  build: {
    lib: {
      entry: 'src/main.ts',
      name: 'UserScript',
      formats: ['es'], // 先输出ES模块
      fileName: () => 'userscript.js',
    },
    rollupOptions: {
      output: {
        // 手动包裹成Async IIFE
        format: 'iife',
        banner: '(async () => {',
        footer: '})();',
      },
    },
  },
});

这种方式会让Rollup把ES模块代码包裹进async自执行函数,最终输出符合要求的用户脚本。

注意:两种方法都需要确保你的用户脚本运行环境支持async/await(现代浏览器都已支持,Tampermonkey/Greasemonkey等脚本管理器也完全兼容)。

内容的提问来源于stack exchange,提问作者Richie Bendall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:34:55