首页 > 解决方案 > 如何让 aws build 忽略我的开发依赖项

问题描述

我的 aws lambda 应用程序有一个标准(hello-world)package.json:

{
  "name": "hello_world",
  "version": "1.0.0",
  "description": "hello world sample for NodeJS",
  "main": "app.js",
  "repository": "https://github.com/awslabs/aws-sam-cli/tree/develop/samcli/local/init/templates/cookiecutter-aws-sam-hello-nodejs",
  "author": "SAM CLI",
  "license": "MIT",
  "dependencies": {
    "axios": "^0.21.1"
  },
  "scripts": {
    "test": "mocha tests/unit/"
  },
  "devDependencies": {
    "chai": "^4.2.0",
    "mocha": "^8.2.1"
  }
}


但是,如果我运行npm i,它会node_modules在此hello-world文件夹中创建文件夹,当我运行时部署到 AWS lambda sam deploy

它不是必需的,因为我将所有必要的依赖项保存在单独的层中。但是,如果我删除它们,那么我将无法在本地进行测试 ( sam local start-api),因为应用程序会引发异常,因为它找不到依赖项。我应该怎么做才能避免node_modules部署到 AWS 但仍有可能在本地运行它?

标签: node.jsamazon-web-services

解决方案


选项1:

在部署之前,删除node_modules文件夹并运行npm install --only=prod将只安装dependencies并忽略的命令devDependencies。然后部署您的应用程序。

选项 2:

在您的本地计算机上全局安装chai并完全mocha删除它们package.json。这将允许您在本地开发期间使用这些模块。

我建议使用第一个选项,因为您不需要全局安装每个开发依赖项。我还建议您设置任何 CI/CD(例如 AWS CodeBuild)来构建/部署您的项目,并停止从本地计算机执行此操作 - 这样您就不需要每次都清理 node_modules 并且您将拥有方便的通用性发展过程。


推荐阅读