Serverless: So fügen Sie externe npm-Module hinzu

Erstellt am 11. Mai 2016  ·  3Kommentare  ·  Quelle: serverless/serverless

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?

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 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.

Alle 3 Kommentare

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

brianneisler picture brianneisler  ·  3Kommentare

jthomas picture jthomas  ·  3Kommentare

BarakChamo picture BarakChamo  ·  3Kommentare

chris-hailstorm picture chris-hailstorm  ·  3Kommentare

gandhi-jay picture gandhi-jay  ·  3Kommentare