如何使用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的代码,保留了原导入语句。
解决方案
要生成包含所有依赖的单文件模块,需从源码入口直接打包,并确保导出配置正确:
- 使用正确的打包命令
直接以源码入口文件(./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(该文件未包含依赖)。
- 确保入口文件有明确导出
如果你的模块需要对外暴露export default,需在src/index.js末尾明确添加:
// 导出你需要暴露的内容,示例: export default cidEncoder;
esbuild只会打包入口文件中实际定义的导出内容,无明确导出则产物不会自动生成export default。
- 可选:指定模块输出格式
若需明确输出为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
相关产品推荐
相关产品推荐

