如何使用 AWS CodeBuild npm 安装所有函数目录

How to npm install all functions directories with AWS CodeBuild

我的后端使用 AWS Cloud Formation,项目文件结构如下:

| template.yaml
| lambda-functions
  | ---- function-1
       |----function.js
       |----package.json
  | ---- function-2
       |----function.js
       |----package.json

在 AWS 构建规范中,我执行 aws cloudformation package 后跟 aws cloudformation deploy

如果我想让它工作,我需要对 function-1function-2 子文件夹执行 npm install 并将 node_modules 子文件夹提交到 git 回购.

如何 运行 npm 直接从构建规范安装到我的所有子文件夹上,这样我就不必提交 node_modules 个子文件夹?

你可以使用 lerna.

如果你的包之间存在依赖关系,Lerna 也会帮助你。

基本上你只需要在你的根目录中添加一个 lerna.json 并使用 lerna 安装你的依赖项。

lerna.json:

{
  "lerna": "2.11.0",
  "packages": [
    "lambda-functions/*"
  ],
  "version": "0.0.0"
}

我假设您使用的是 AWS CodeBuild,所以这里有一些关于如何配置安装阶段的示例:

buildspec.yml 与 lerna:

version: 0.2
phases:
  install:
    commands:
      - echo Entered the install phase...
      - npm install --global lerna 
      - lerna bootstrap --concurrency=1 -- --production

  ...

lerna bootstrap 将为每个包创建 node_modules

如果你不想使用lerna,你可以为每个包添加一个命令。类似于:

buildspec.yml 用纱线:

version: 0.2
phases:
  install:
    commands:
      - echo Entered the install phase...
      - npm install --global yarn
      - yarn --cwd lambda-functions/function-1 --production install
      - yarn --cwd lambda-functions/function-2 --production install
      - yarn --cwd lambda-functions/function-3 --production install

  ...

或:

buildspec.yml 与 npm:

version: 0.2
phases:
  install:
    commands:
      - echo Entered the install phase...
      - cd lambda-functions/function-1 && npm install --production
      - cd lambda-functions/function-2 && npm install --production
      - cd lambda-functions/function-3 && npm install --production

  ...