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

Node.js 20 ESM项目Webpack打包AWS Lambda时无法引入image-size问题

解决AWS Lambda打包后找不到image-size模块的要点
  • 统一导入语法,避免ESM与CommonJS混用
    你的项目已设置为ESM(type="module"),混用require()会导致Webpack对模块的识别逻辑混乱,改成ESM的import语法:

    import sizeOf from 'image-size';
    

    这样Webpack能正确追踪到该依赖,确保它被纳入打包流程。

  • 检查Webpack的externals配置
    如果你的Webpack配置使用了webpack-node-externals这类工具(常见于Serverless项目),默认会把所有node_modules的包排除在打包外,让Lambda运行时从环境中读取。若未给Lambda配置包含image-size的层,需要将image-size加入允许列表:

    const nodeExternals = require('webpack-node-externals');
    
    module.exports = {
      // 其他配置
      externals: [nodeExternals({ allowlist: ['image-size'] })],
    };
    

    若是自定义externals规则,确保image-size不在被排除的列表中。

  • 确认Webpack的target设置
    打包Node.js环境(AWS Lambda)的代码时,必须将Webpack的target设为node,这样Webpack会保留Node.js模块系统特性,正确处理CommonJS模块的导入:

    module.exports = {
      target: 'node',
      // 其他配置
    };
    
  • 验证Webpack的resolve配置
    部分CommonJS库的入口文件需要Webpack明确解析,确保resolve配置中包含正确的主字段:

    module.exports = {
      resolve: {
        mainFields: ['main', 'module'],
      },
      // 其他配置
    };
    

    这会让Webpack优先读取库的main字段(CommonJS入口),避免解析失败。

  • 检查打包产物,确认依赖被包含
    打包完成后,打开生成的bundle文件,搜索image-size相关代码,确认它已被打包进去。如果使用多文件打包模式,检查输出目录中是否包含image-size的模块文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:16:05