使用Esbuild打包Node项目时遇模块解析错误求助
解决Esbuild打包Node项目时无法解析
node:child_process/node:path的问题 问题出在Esbuild默认不会自动识别带node:前缀的Node核心模块,这类模块是Node运行环境自带的,根本不需要打包进你的bundle里。直接把它们标记为external就能解决。
方式1:修改命令行参数
在你的Esbuild命令里添加--external:node:*,一次性排除所有node:前缀的核心模块(比单独加每个模块更省心)。修改后的完整命令:
esbuild src/index.ts --platform=node --outfile=dist/index.js --bundle --minify --define:process.env.NODE_ENV=\"production\" --external:node:*
如果只想单独排除报错的两个模块,也可以写成:
esbuild src/index.ts --platform=node --outfile=dist/index.js --bundle --minify --define:process.env.NODE_ENV=\"production\" --external:node:child_process --external:node:path
方式2:用配置文件管理(更适合复杂项目)
如果项目后续需要更多Esbuild配置,建议写个配置文件esbuild.config.js:
require('esbuild').build({ entryPoints: ['src/index.ts'], platform: 'node', outfile: 'dist/index.js', bundle: true, minify: true, define: { 'process.env.NODE_ENV': '"production"' }, external: ['node:*'] }).catch(() => process.exit(1))
然后把prepublishOnly脚本改成调用这个配置文件:
"prepublishOnly": "node esbuild.config.js"
标记为external后,Esbuild会保留代码里require('node:xxx')的调用,不会再尝试解析打包这些模块,运行时Node会自动找到对应的核心模块。
内容的提问来源于stack exchange,提问作者Daniel Poreda
相关产品推荐
相关产品推荐

