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

Node.js升级至16后Serverless部署遇匹配及导入错误求助

问题分析与解决方案

核心问题拆解

  1. No file matches include/exclude patterns错误:全局package.exclude: ['./**']规则过于激进,在Node.js 16对应的Serverless框架版本中,函数级的include无法覆盖全局排除所有文件的规则,导致打包时找不到符合条件的文件。
  2. Runtime.ImportModuleError崩溃:移除全局exclude后,函数级的include路径配置不匹配handler实际位置(handler在src/dist下,但include写的是dist/**/*),导致部署包缺失必要文件;同时serverless-plugin-optimize未适配Node.js 16,可能错误裁剪了依赖模块。

具体修复步骤

1. 调整全局打包排除规则

彻底删除exclude: ['./**'],换成精准排除本地无关文件的规则,避免误删部署必需文件:

package: {
  individually: true,
  exclude: [
    '.git/**',
    '.env',
    'localstack/**',
    'tests/**',
    'src/**/*.ts' // TS项目仅保留编译后的dist文件,源码无需部署
  ]
},

2. 修正函数级打包包含路径

匹配handler的实际路径,确保src/dist下的编译文件被正确打包,同时优化node_modules的打包范围:

functions: {
  api: {
    timeout: 30,
    handler: 'src/dist/serverless.handler',
    package: {
      include: [
        'src/dist/**/*', // 对应handler所在的实际路径
        '!src/dist/**/*.map', // 排除sourcemap文件
        'node_modules/**/*'
      ],
      exclude: [
        'node_modules/**/*.test.js', // 排除依赖中的测试文件
        'node_modules/**/*.md' // 排除依赖中的文档
      ]
    },
  },
},

3. 适配serverless-plugin-optimize至Node.js 16

将插件升级到兼容Node.js 16的最新版本,并在custom配置中明确指定运行时版本,避免优化时裁剪必要依赖:

custom: {
  'serverless-plugin-optimize': {
    enabled: true,
    minimize: true,
    nodeVersion: 'nodejs16.x' // 指定运行时版本,确保优化后的代码兼容
  },
  // 其他custom配置...
},

4. 清理缓存并重新部署

  • 删除项目根目录下的.serverless文件夹,清除旧打包缓存
  • 删除node_modules并重新执行npm install,确保依赖是针对Node.js 16编译的
  • 重新执行serverless deploy

5. 精准排查缺失模块

如果仍出现Runtime.ImportModuleError,登录AWS查看对应函数的CloudWatch日志,找到具体无法导入的模块名称,然后在函数的package.include中单独添加该模块的路径(例如node_modules/xxx/**/*)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:06:29