如何在安装npm包时忽略其指定的依赖项?
Node.js Lambda嵌套依赖aws-sdk排除方案
你可以通过以下两种主流方案实现排除嵌套依赖aws-sdk的需求,适配AWS SAM部署场景:
方案1:通过npm overrides字段强制排除嵌套依赖
npm 8.3.0及以上版本支持overrides配置,可以强制覆盖项目所有依赖的子依赖规则,直接全局标记aws-sdk不需要安装:
在项目根目录的package.json中添加如下配置:
{ "name": "your-sam-project", "dependencies": { "aws-appsync": "^4.1.9" }, "overrides": { "aws-sdk": "npm:empty-npm-package@^1.0.0" } }
配置完成后执行npm install,所有嵌套依赖引入的aws-sdk都会被替换为一个空的npm包,不会占用部署包体积,代码运行时会自动调用Lambda环境内置的aws-sdk。
方案2:通过AWS SAM打包规则直接过滤
不需要修改npm配置,直接在SAM模板的函数配置中添加排除规则,打包时自动过滤所有aws-sdk相关目录:
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Resources: YourLambdaFunction: Type: AWS::Serverless::Function Properties: Runtime: nodejs18.x # 替换为你实际使用的运行时版本 CodeUri: ./ Handler: index.handler Exclude: # 过滤根目录直接依赖的aws-sdk - "node_modules/aws-sdk/**" # 过滤所有嵌套路径下的aws-sdk - "node_modules/**/aws-sdk/**"
该方案不会修改本地node_modules结构,仅在SAM部署打包阶段生效,适合不想改动依赖配置的场景。
注意事项
- Lambda Node.js 18及以下运行时默认内置AWS SDK v2,如果你使用的aws-appsync版本兼容内置SDK版本,两种方案都不会影响运行时功能
- 如果使用yarn作为包管理器,可以用
resolutions字段替代npm的overrides,配置逻辑完全一致
内容的提问来源于stack exchange,提问作者DavGin
相关产品推荐
相关产品推荐

