无Lambda场景下Serverless打包Zip归档的实现方案咨询
解决Serverless框架无functions时无法打包指定文件夹的问题
方案1:添加占位空函数触发打包流程
Serverless框架的打包逻辑默认绑定functions配置,所以可以通过添加一个无实际业务作用的占位函数,强制框架触发打包流程,再通过package配置精准指定要打包的文件夹:
- 在
serverless.yml中添加空函数配置:
functions: dummy: handler: dummy.handler # 无需实际存在该文件,仅用于触发打包逻辑
- 配置package段,锁定打包范围:
package: include: - ./your-target-folder/** # 替换为你需要打包的目标文件夹路径 exclude: - node_modules/** - .git/** - serverless.yml # 按需排除无关文件
- 执行
sls package,框架会在.serverless目录下生成对应Zip包。后续可直接取用该包,或部署后删除占位函数。
方案2:用Serverless脚本插件手动触发打包
借助serverless-plugin-scripts插件,在部署流程中插入自定义打包命令,绕开框架默认的functions绑定逻辑:
- 安装插件:
npm install serverless-plugin-scripts --save-dev
- 在
serverless.yml中配置插件与打包脚本:
plugins: - serverless-plugin-scripts custom: scripts: before:deploy:package: 'zip -r ./output-package.zip ./your-target-folder' # 替换为你的打包命令与路径
- 执行
sls deploy时,会先运行自定义zip命令生成包,再结合其他资源配置完成部署。
方案3:手动打包+Serverless资源上传
若仅需将打包后的文件上传至云服务(如S3),可完全手动打包,再通过Serverless的资源配置完成上传:
- 手动执行打包命令:
zip -r ./target-package.zip ./your-target-folder
- 在
serverless.yml中配置云资源(以AWS S3为例):
resources: Resources: DeploymentBucket: Type: AWS::S3::Bucket Properties: BucketName: your-unique-bucket-name # 替换为你的Bucket名称 UploadedPackage: Type: AWS::S3::Object Properties: Bucket: !Ref DeploymentBucket Key: packages/target-package.zip Source: ./target-package.zip
- 执行
sls deploy,框架会自动将手动打包好的Zip上传至指定S3路径。
内容的提问来源于stack exchange,提问作者Cherry
相关产品推荐
相关产品推荐

