如何在Serverless Framework的package输出中排除@aws-sdk包?
有效排除@aws-sdk包的解决方案
1. 修正forceExclude的路径(最直接修复)
你之前的forceExclude配置路径有误,@aws-sdk是作用域包,正确路径应为node_modules/@aws-sdk/**,而非node_modules/aws-sdk/**。修改后的配置如下:
service: my-service provider: name: aws runtime: nodejs14.x package: exclude: - node_modules/** forceExclude: - node_modules/@aws-sdk/** functions: # 你的函数配置...
forceExclude优先级高于所有include规则,会强制忽略指定路径,确保该包不会被打包进构建文件。
2. 精准控制依赖的包含/排除
如果项目需要保留部分node_modules依赖,可以先排除所有node_modules,再显式声明需要保留的依赖,避免意外包含@aws-sdk:
package: exclude: - node_modules/** include: - node_modules/需要保留的包1/** - node_modules/需要保留的包2/** forceExclude: - node_modules/@aws-sdk/**
3. 使用serverless-webpack进行严格依赖管理
如果上述方法仍不生效,推荐用serverless-webpack插件,借助Webpack的树摇和externals配置精准控制打包内容:
- 安装依赖:
npm install serverless-webpack webpack webpack-cli --save-dev
- 在
serverless.yml中添加插件配置:
plugins: - serverless-webpack
- 创建
webpack.config.js,配置externals排除@aws-sdk:
module.exports = { entry: './handler.js', target: 'node', externals: { '@aws-sdk/*': 'commonjs @aws-sdk/*' }, mode: 'production' };
Webpack会将@aws-sdk相关模块标记为外部依赖,不会打包到最终构建文件中。
额外检查点
- 清理构建缓存:执行
serverless package --clean,避免旧构建文件干扰结果。 - 排查插件影响:暂时禁用
serverless-offline等第三方插件,测试是否是插件修改了打包规则。
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

