Serverless Framework:如何添加外部 NPM 包?
Serverless Framework: How to add external NPM packages?
我的情况是,我在将外部 NPM 包添加到我的 Serverless Framework 项目时遇到了一些麻烦(具体包是 geopoint)。
我转到了 Serverless 项目的根文件夹和 运行 npm install geopoint --save
。 package.json 更新为 dependencies": { "geopoint": "^1.0.1" }
并创建了 node_modules 文件夹。
我的文件夹结构如下所示:
根项目文件夹
-函数
--地理空间
---handler.js
-node_modules
--geopoint
在我的 functions/geospatial/handler.js 中,我声明了地理点模块:
var geopoint = require('geopoint');
var geopoint = require('../../geopoint');
var geopoint = require('../../../geopoint');
lambda 控制台 returns 错误:
{
"errorMessage": "Cannot find module '../../geopoint'",
"errorType": "Error",
"stackTrace": []
}
如何正确地将外部 NPM 模块添加到无服务器框架项目中?
我想你遇到的和我最近遇到的是一样的。我可以在我的应用程序根目录中安装 npm 包,但不会将任何内容部署到 lambda。
我的理解是serverless把所有东西都部署在各个组件目录下(应用根目录下的子目录)。在您的情况下,在 functions
.
我在无服务器文档中找不到太多关于此的内容,但我所做的是在我的 functions
文件夹下定义一个 package.json
文件,然后 运行 在其中安装一个 npm子目录。然后在部署到 lambda 之后,这个目录下的 node_modules
也被部署了,这意味着我的函数代码可能需要这些 npm 模块中的任何一个。
因此,您的文件夹结构现在应该如下所示:
root-project-folder
|-functions
|--package.json
|--node_modules
|---geopoint
|--geospatial
|---handler.js
|-package.json
|-node_modules
|--geopoint
这里的好处还在于,您只能部署函数所需的 npm 依赖项,而无需部署无服务器部署资源所需的依赖项。
希望这有帮助 - 再一次,我不确定这是最佳实践,因为我没有在无服务器存储库或任何示例代码中找到的任何地方记录。
对我来说最好的解决方案是无服务器插件:serverless-plugin-include-dependencies
您可以执行以下操作:
# serverless.yml
custom:
webpack:
includeModules:
packagePath: '../package.json' # relative path to custom package.json file.
如果有人遇到这个问题并且上面 none 的答案有帮助,试试这个(对我有用):
custom:
webpack:
webpackIncludeModules: true