node.js - 如何让 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 但仍有可能在本地运行它?
解决方案
选项1:
在部署之前,删除node_modules
文件夹并运行npm install --only=prod
将只安装dependencies
并忽略的命令devDependencies
。然后部署您的应用程序。
选项 2:
在您的本地计算机上全局安装chai
并完全mocha
删除它们package.json
。这将允许您在本地开发期间使用这些模块。
我建议使用第一个选项,因为您不需要全局安装每个开发依赖项。我还建议您设置任何 CI/CD(例如 AWS CodeBuild)来构建/部署您的项目,并停止从本地计算机执行此操作 - 这样您就不需要每次都清理 node_modules 并且您将拥有方便的通用性发展过程。
推荐阅读
- python - 如何使用 Blender 脚本删除场景中较小的多个对象?
- ios - 当用户单击空白区域时处理可访问性
- azure - 如何添加我的应用服务本地组(例如性能监视器用户)的 IIS 池标识
- swift - 来自多个 .metal 文件(计算内核和 CIKernel 实现)的一个默认 MTLLibrary?
- mysql - 如何在新表中将行分组在一起?
- ocaml - 如何使用 OCaml 在终端中隐藏光标
- javascript - 在子集合中设置和查询数据?
- python - 使用 pandas 对多个映射列进行按列操作
- docker - 如何扩展 CouchDB Docker 映像以包含模式 + 种子数据
- ios - 谷歌地图 GMSPanoramaView api 被阻止