Serverless-esbuild设置exclude:"*"无法排除node_modules问题求助
解决Serverless Framework里esbuild排除整个node_modules无效的问题
为啥会这样?
问题出在serverless-layers插件和serverless-esbuild的配合上——光给esbuild设置exclude不足以让layers插件自动把所有node_modules依赖打包到层里,得两边的配置都跟上。
具体怎么改?
- 补全esbuild的配置
serverless-esbuild的exclude对应esbuild的external选项,有些版本里得同时显式设置external才能让通配符*生效。在serverless.ts里这么写:esbuild: { exclude: ['*'], external: ['*'], // 显式指定external,确保通配符生效 }, - 配置serverless-layers抓取全量node_modules
得告诉layers插件要把所有node_modules里的依赖打包成层,添加自定义配置:custom: { layers: { packagePath: './node_modules', // 指定要打包到层的目录 exclude: [], // 不排除任何依赖,确保全量打包 }, }, - 升级serverless-esbuild到最新版
旧版本对通配符*的支持有bug,直接升级即可:npm update serverless-esbuild - 检查函数打包模式
如果开了package.individually: true,每个函数的esbuild配置里都得同步加上exclude: ['*'],不然个别函数可能还是会打包node_modules。
怎么验证生效?
部署完看Lambda函数的代码包大小,要是代码包只剩你的业务代码(体积骤降),同时layers里能看到node_modules的内容,就说明配置对了。
内容的提问来源于stack exchange,提问作者Akumachan
相关产品推荐
相关产品推荐

