VS Code扩展开发中如何让esbuild打包TypeScript时包含内部依赖
问题核心原因:你使用的0.12.x版本esbuild对npm包的**条件导出(conditional exports)**特性支持不完善,jsonc-parser v3+版本使用了条件导出定义内部路径映射,旧版esbuild无法正确识别,导致只打包了入口文件,没有把内部依赖的impl目录下的模块打进最终产物。
可直接落地的解决方法共三种,按优先级排序如下:
方案1:升级esbuild版本(最推荐)
你当前使用的esbuild 0.12.28是2021年的旧版本,升级到0.14.0及以上版本即可原生支持jsonc-parser的条件导出规则,无需修改其他配置。升级命令:npm install esbuild@latest --save-dev升级后重新执行
npm run bundle即可正常打包所有依赖。方案2:将jsonc-parser标记为外部依赖
如果因项目约束无法升级esbuild,可以在打包命令中添加--external:jsonc-parser参数,告诉esbuild不要打包这个模块,运行时直接从node_modules加载:
修改package.json的bundle脚本为:"bundle": "esbuild index.ts --bundle --platform=node --external:jsonc-parser --outfile=out.js"注意需要确保jsonc-parser保存在
dependencies而非devDependencies中,发布VS Code扩展时工具会自动将该依赖一同打包,不影响扩展运行。方案3:显式引入全量入口文件
如果前两种方案都不适用,可以修改import路径,直接指向jsonc-parser的全量打包入口,绕过条件导出解析:import * as jsonc from 'jsonc-parser/lib/umd/jsonc.js'
验证方式
打包完成后执行npm run run-bundle,如果控制台正常输出解析结果和空错误数组,说明问题已解决。
内容的提问来源于stack exchange,提问作者Peter Hull

