从 npm 工作区目录为 lambda 创建独立的节点包存档

问题描述 投票:0回答:1

我有一个使用 npm 工作区的 monorepo,安装后,它看起来像这样:

/
  package.json
  node_modules/
  packages/
    lambda/
      node_modules/
      package.json
      package-lock.json
      <source code>
    cdk-stacks/
      node_modules/
      package.json
      package-lock.json
      <source code>

我需要创建一个

.zip
文件,该文件可以作为 Lambda 处理程序上传到 AWS,该文件是根据
./packages/lambda
中的代码创建的。然而,一些依赖项被提升到顶层
node_modules

有没有一种方法,除了将文件复制到 monorepo 之外的新目录之外,还可以进行安装,使所有

node_modules
都安装在特定包的根目录下,这样
.zip
存档就不会丢失任何内容依赖关系?

npm aws-lambda monorepo
1个回答
0
投票

我有同样的问题,很惊讶我找不到答案。这是我如何让它发挥作用的;无可否认,这有点老套(更多内容见下文)。

关键在于 NPM 工作区提升所有依赖项,并且不会创建每个工作区

package-lock.json
node_modules/
。此外,当一个包引用另一个包时(例如
lambda
依赖于
cdk-stacks
),NPM 工作区会使用符号链接。以下步骤允许我仅安装该工作区的依赖项,并在准备存档时保留符号链接。

仅为一个工作区安装依赖项

npm ci --production --workspace=packages/lambda

npm ci
是“全新安装”,删除非产品依赖项。仅包含
packages/lambda/package.json
和 root
package.json
指定的依赖项;所有其他的都被删除。如果被
cdk-stacks
引用,则可能包括
lambda
;但因为它是一个工作区,所以它将被符号链接。

复制节点模块

cp -RL node_modules packages/lambda/

node_modules
复制到
lambda
工作区,我认为这是您要构建的工作区。
-RL
选项确保符号链接被重定向。 NPM 工作区的提升使用符号链接来引用其他工作区包 - 在您的情况下为
cdk-stacks
。由于您要移动目录,因此需要符号链接指向其旧目标 -
packages/cdk-stacks/

注意:这些选项适用于 Mac,尚未在其他操作系统上尝试过。

创建 Zip 存档

zip -r my-zipfile-name.zip packages/lambdas/

Zip(至少在 Mac 上)将符号链接的目标目录完全复制到存档中。此 Zipfile 可以发布到 S3 并由 lambda 引用。

一般想法/担忧

令我有点惊讶的是,NPM Workspaces 不支持创建开箱即用的可存档包。看起来它相当适合

nom publish
,这不适用于创建 Zip 存档。 lambda 需要 Zip,所以我有点惊讶没有内置更好的工作流程。

请注意,有一些 RFC 用于改进此工作流程。例如: https://github.com/npm/rfcs/issues/287

© www.soinside.com 2019 - 2024. All rights reserved.