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

如何使用esbuild打包包含所有导入模块的单文件模块?

问题:如何用esbuild生成包含所有依赖的单文件模块?

我的模块代码

import * as cborg from 'cborg'
import { CID } from 'multiformats/cid'
function cidEncoder (obj) {

}
// ... 其他代码

遇到的问题

问题1:打包产物缺少export default

使用以下bundle命令:

"bundle": "./node_modules/.bin/esbuild ./dist/index.mjs --bundle --outfile=./dist/out.mjs"

生成的out.mjs文件中缺少export default语句。

问题2:构建产物未包含依赖代码

使用以下build命令:

"build": "./node_modules/.bin/esbuild ./src/index.js --target=es2020 --outfile=./dist/index.mjs"

产物中未打包cborg和multiformats/cid的代码,保留了原导入语句。

解决方案

要生成包含所有依赖的单文件模块,需从源码入口直接打包,并确保导出配置正确:

  1. 使用正确的打包命令
    直接以源码入口文件(./src/index.js)作为输入,添加--bundle参数打包,同时指定目标环境:
"bundle": "./node_modules/.bin/esbuild ./src/index.js --bundle --target=es2020 --outfile=./dist/out.mjs"
  • --bundle:强制esbuild将所有依赖打包进单文件,不会保留外部导入语句。
  • 必须用src目录下的源码文件作为入口,避免使用之前build生成的dist/index.mjs(该文件未包含依赖)。
  1. 确保入口文件有明确导出
    如果你的模块需要对外暴露export default,需在src/index.js末尾明确添加:
// 导出你需要暴露的内容,示例:
export default cidEncoder;

esbuild只会打包入口文件中实际定义的导出内容,无明确导出则产物不会自动生成export default。

  1. 可选:指定模块输出格式
    若需明确输出为ES模块,可添加--format=esm参数:
"bundle": "./node_modules/.bin/esbuild ./src/index.js --bundle --format=esm --target=es2020 --outfile=./dist/out.mjs"

按上述配置打包后,out.mjs会包含所有依赖代码,同时保留你定义的export default语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:45:19