如何使用 AWS "sam build" 为 nodejs 排除模块?

How to exclude modules using AWS "sam build" for nodejs?

使用 sam build 命令我原以为不会包含 aws-sdk 包,因为 Node.js Lambda 运行time 已经包含了它。

据我所知,nodejs 的 sam build 是来自 claudiajsclaudia pack 命令的端口,但是当我 [=30] 时,我没有看到任何 --no-optional-dependencies 标志=] sam build --help.

我尝试安装 aws-sdk 作为可选依赖项,但仍然包含在内。

有没有办法使用 sam build 命令从 node_modules 目录中排除依赖项?

根据我的实验,我发现了几个选项:

  1. 安装 aws-sdk 作为开发依赖项
npm i -D aws-sdk
  1. 将 aws-sdk 作为可选依赖项安装,然后使用 .npmrc 文件禁用在 npm install 上安装可选的 decencies
npm i -O aws-sdk
# .npmrc
optional = false

我的文件夹结构如下所示:

-- project
   |-- lambdas
   |   |-- lambda1
   |   |   |-- node_modules
   |   |   |   `-- ...
   |   |   |-- .npmrc
   |   |   |-- index.js
   |   |   |-- package-lock.json
   |   |   `-- package.json
   |   `-- lambda2
   |       |-- node_modules
   |       |   `-- ...
   |       |-- .npmrc
   |       |-- index.js
   |       |-- package-lock.json
   |       `-- package.json
   |-- package-lock.json
   |-- package.json
   `-- template.yml

运行 sam build 在这两个实例中都捆绑了包,对我来说没有不需要的依赖项。

McShaman 答案对 NPM 6 有效。

NPM 配置已在 NPM 7 中更改 - “可选”已被删除。

您应该改用“省略”来忽略可选依赖项:

https://docs.npmjs.com/cli/v7/using-npm/config#omit

# .npmrc
omit=optional