You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Serverless Framework使打包后index.js处于Zip包根目录?

解决方案

要实现将serverless/function-folder下的文件直接放到Zip包根目录,同时保留指定的主项目依赖,可通过以下两种方式配置:

方式一:使用package.basePath(无需额外插件)

修改serverless.yml,针对单个函数配置打包基础路径,调整后的完整配置如下:

service: 'service'

plugins:
  - serverless-offline

package:
  individually: true
  patterns:
    - '!./**'
    - 'node_modules/dependency1/**'
    - 'node_modules/dependency2/**'
    - 'node_modules/dependency3/**'

provider:
  name: aws
  runtime: nodejs16.x

functions:
  function_folder:
    handler: index.handler # 改为指向Zip根目录的index.js
    package:
      basePath: serverless/function_folder # 将该目录设为打包的基础路径
      patterns:
        - './**' # 包含function-folder下的所有文件及子目录

配置说明

  • package.individually: true开启单函数独立打包,支持为每个函数单独配置打包规则
  • 函数级的package.basePath指定serverless/function_folder后,Serverless会将该目录下的所有内容直接放到Zip包根目录,自然实现index.js、other_files的根目录放置
  • 全局package.patterns保留指定的主项目依赖,这些依赖会被打包到Zip包的node_modules目录下
  • 函数handler路径改为index.handler,匹配Zip根目录的index.js文件

方式二:使用serverless-plugin-copy插件(适配复杂场景)

如果需要更灵活的文件移动规则,可借助serverless-plugin-copy插件实现:

  1. 安装插件:
npm install serverless-plugin-copy --save-dev
  1. 修改serverless.yml:
service: 'service'

plugins:
  - serverless-offline
  - serverless-plugin-copy

package:
  individually: true
  patterns:
    - '!./**'
    - 'node_modules/dependency1/**'
    - 'node_modules/dependency2/**'
    - 'node_modules/dependency3/**'
    - 'serverless/function_folder/**' # 先将原目录文件纳入打包范围

custom:
  copy:
    - source: serverless/function_folder/*
      target: ./ # 将function-folder下的文件复制到打包根目录
    - source: serverless/function_folder/other_files
      target: ./other_files/ # 复制子目录到根目录对应位置

provider:
  name: aws
  runtime: nodejs16.x

functions:
  function_folder:
    handler: index.handler # 指向Zip根目录的index.js

说明

  • 插件会在打包流程中执行文件复制操作,精准调整Zip包内的目录结构
  • 适合需要对多组文件/目录进行自定义移动的复杂场景

更优维护建议

如果后续要集成更多Lambda函数到主项目,建议调整目录结构,将所有函数统一放到src/functions目录下,每个函数单独占用一个子目录:

main-project-directory
- node_modules
- src
  - functions
    - function-folder
      - other_files/
      - index.js
- serverless.yml

结合方式一的basePath配置,能更清晰地管理每个函数的打包规则,降低长期维护成本。

内容的提问来源于stack exchange,提问作者basicBanana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:15:53