Hallo,
Ich habe ähnliche Probleme gesehen, aber ich kann es nicht zum Laufen bringen. Ich hätte gerne euren Rat, ob das, was ich tue, richtig ist.
So sieht meine Ordnerstruktur aus:
.
├── admin.env
├── functions
│ └── geospatial
│ └── get_bounding_coordinates
│ ├── event.json
│ ├── handler.js
│ └── s-function.json
├── _meta
│ ├── resources
│ │ └── s-resources-cf-dev-uswest2.json
│ └── variables
│ ├── s-variables-common.json
│ ├── s-variables-dev.json
│ └── s-variables-dev-uswest2.json
├── node_modules
│ └── geopoint
│ ├── geopoint.js
│ ├── index.js
│ ├── LICENSE
│ ├── package.json
│ ├── README.md
│ └── test
│ ├── test.accessors.js
│ ├── test.bounding.js
│ ├── test.constructor.js
│ ├── test.conversions.js
│ └── test.distance.js
├── package.json
├── s-project.json
├── s-resources-cf.json
└── s-templates.json
Zuerst habe ich im Stammverzeichnis meines Projektordners "npm install geopoint --save" ausgeführt. es fügte "dependencies": { "geopoint": "^1.0.1" }
auf package.json hinzu. Es fügte auch den Ordner npm_modules und seinen Inhalt hinzu.
In functions/geospatial/get_bounding_coordinates/handler.js habe ich var geopoint = require('geopoint');
deklariert
Der Fehler ist, dass Lambda Folgendes zurückgibt:
{
"errorMessage": "Cannot find module 'geopoint'",
"errorType": "Error",
"stackTrace": [
"Function.Module._load (module.js:276:25)",
"Module.require (module.js:353:17)",
"require (internal/module.js:12:17)",
"Object.<anonymous> (/var/task/handler.js:2:16)",
"Module._compile (module.js:409:26)",
"Object.Module._extensions..js (module.js:416:10)",
"Module.load (module.js:343:32)",
"Function.Module._load (module.js:300:12)",
"Module.require (module.js:353:17)"
]
}
Stimmt etwas mit meiner Implementierung nicht?
In Ihrer s-function.json müssen Sie Ihren Handler als functions/geospatial/get_bounding_coordinates/handler.handler
angeben. Dadurch wird der Funktionsstamm auf das Verzeichnis gesetzt, das die node_modules
enthält. Aus meiner Erfahrung ist es besser, die Funktion root in einem Unterordner des Projekts zu haben, da sonst alle Serverless-Plugins mitgepackt werden.
Hallo! Vielen Dank für die Antwort! Es funktionierte! Was meinst du mit dem Setzen der Funktion root im Unterordner? Ist es zum Beispiel, den Ordner node_modules und die Datei package.json im Ordner functions abzulegen?
Hi @taptip wäre toll, wenn wir diese Diskussion in unseren Gitter-Chat verschieben könnten, damit wir dort Support-Fragen stellen können. Wir werden unsere Dokumentation viel besser machen, um dies in Zukunft abzudecken.
Ich werde das Problem vorerst schließen, um es als gelöst zu markieren.
Hilfreichster Kommentar
In Ihrer s-function.json müssen Sie Ihren Handler als
functions/geospatial/get_bounding_coordinates/handler.handler
angeben. Dadurch wird der Funktionsstamm auf das Verzeichnis gesetzt, das dienode_modules
enthält. Aus meiner Erfahrung ist es besser, die Funktion root in einem Unterordner des Projekts zu haben, da sonst alle Serverless-Plugins mitgepackt werden.