tap*_*ard 19 node.js aws-lambda serverless-framework
我的情况是我在向我的无服务器框架项目添加外部NPM包时遇到了一些麻烦(特定包是geopoint).
我去了无服务器项目的根文件夹并运行npm install geopoint --save.package.json已更新,dependencies": { "geopoint": "^1.0.1" }并创建了node_modules文件夹.
我的文件夹结构是这样的:
根项目文件夹
-functions
--geospatial
--- handler.js
-node_modules
--geopoint
在我的函数/ geospatial/handler.js中,我将geopoint模块声明为:
var geopoint = require('geopoint');
var geopoint = require('../../geopoint');
var geopoint = require('../../../geopoint');
Run Code Online (Sandbox Code Playgroud)
lambda控制台返回错误:
{
"errorMessage": "Cannot find module '../../geopoint'",
"errorType": "Error",
"stackTrace": []
}
Run Code Online (Sandbox Code Playgroud)
如何正确地将外部NPM模块添加到无服务器框架项目?
e_m*_*ney 27
我认为你所经历的与我最近经历的一样.我可以在我的应用程序根目录中安装npm软件包,但什么都不会部署到lambda.
我的理解是无服务器在每个组件目录(应用程序根目录下的子目录)下部署所有内容.在你的情况下,在functions.
我无法在无服务器文档中找到太多,但我所做的是package.json在我的functions文件夹下定义一个文件,然后在该子目录中运行npm install.然后在部署到lambda之后,node_modules此目录也被部署,这意味着我的功能代码可能需要任何这些npm模块.
因此,您的文件夹结构现在应如下所示:
root-project-folder
|-functions
|--package.json
|--node_modules
|---geopoint
|--geospatial
|---handler.js
|-package.json
|-node_modules
|--geopoint
Run Code Online (Sandbox Code Playgroud)
这里的好处是,您只能部署您的功能所需的npm依赖项,而无需无服务器需要部署资源的那些.
希望这有助于 - 再一次,不确定这是最佳实践,只是我所做的事情,因为我没有记录在无服务器存储库或任何示例代码中的任何地方.
您可以执行以下操作:
# serverless.yml
custom:
webpack:
includeModules:
packagePath: '../package.json' # relative path to custom package.json file.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11669 次 |
| 最近记录: |