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

使用esbuild构建Chrome扩展时,如何避免转译代码出现eval?

解决esbuild构建Chrome扩展时生成eval的问题

针对你的情况,esbuild生成eval通常源于两个原因:一是对Node.js模块(如vm)的自动polyfill,二是低版本target导致的不必要语法转译。可以通过以下配置修改解决:

调整esbuild配置

修改构建配置,添加目标版本并禁用不必要的polyfill:

require('esbuild')
    .build({
        entryPoints: [
            'src/contentScript.ts',
            'src/index.html',
        ],
        outdir: 'dist',
        bundle: true,
        platform: 'browser',
        target: 'chrome90', // 根据你的需求指定适配的Chrome版本
        external: ['vm'], // 阻止esbuild polyfill Node.js的vm模块
        // 移除regeneratorRuntime的banner:高版本Chrome原生支持async/await等特性,无需额外声明
    })
    .catch(() => process.exit(1));

配置说明

  • target: 'chrome90':Chrome 90及以上版本已原生支持async/await、Generator函数等ES6+特性,esbuild会跳过不必要的转译逻辑,不再生成依赖regeneratorRuntime的代码,从根源避免相关的eval生成。
  • external: ['vm']:你的代码或依赖可能间接引入了Node.js的vm模块,esbuild在浏览器平台下会自动为其生成包含eval的polyfill。添加该配置可阻止该polyfill生成(前提是你的代码实际不需要vm模块功能)。
  • 移除banner配置:当target版本足够高时,Chrome原生支持所需特性,无需再声明regeneratorRuntime。

额外检查

如果修改后仍存在eval,排查以下内容:

  • 代码中是否有使用new Function()、动态拼接代码等手动生成代码的逻辑?
  • 依赖库内部是否使用了eval或类似动态执行逻辑?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:07:07