webentwicklung-frage-antwort-db.com.de

Serverless Framework: Wie füge ich externe NPM-Pakete hinzu?

Meine Situation ist, dass ich Probleme habe, externe NPM-Pakete zu meinem Serverless Framework-Projekt hinzuzufügen (spezifisches Paket ist Geopoint). 

Ich ging in den Stammordner des Serverless-Projekts und lief npm install geopoint --save. package.json wurde mit dependencies": { "geopoint": "^1.0.1" } aktualisiert, und der Ordner node_modules wurde erstellt.

Meine Ordnerstruktur sieht folgendermaßen aus:
Stammprojektordner
- Funktionen
-- geospatial
--- handler.js
- Knotenmodule
-- Geopoint

In meinen Funktionen/geospatial/handler.js habe ich das Geopoint-Modul mit:

    var geopoint = require('geopoint');
    var geopoint = require('../../geopoint');
    var geopoint = require('../../../geopoint');

Die Lambda-Konsole gibt einen Fehler aus:

    {
      "errorMessage": "Cannot find module '../../geopoint'",
      "errorType": "Error",
      "stackTrace": []
    }

Wie kann ich externe NPM-Module ordnungsgemäß zu einem Serverless Framework-Projekt hinzufügen?

15
taptipblard

Ich denke, was Sie erleben, ist dasselbe, was ich kürzlich erlebt habe. Ich könnte npm-Pakete in meinem Anwendungsstammverzeichnis installieren, aber es würde nichts für Lambda bereitgestellt werden.

Ich verstehe, dass serverlos alles unter jedem Komponentenverzeichnis (Unterverzeichnis unter dem Anwendungsstammverzeichnis) bereitstellt. In Ihrem Fall unter functions.

Ich konnte in der serverlosen Dokumentation nicht viel darüber finden, aber ich definierte eine package.json-Datei in meinem functions-Ordner und führe dann eine npm-Installation in diesem Unterverzeichnis aus. Nach der Bereitstellung für Lambda wurde dann auch node_modules in diesem Verzeichnis implementiert, was bedeutet, dass mein Funktionscode eines dieser npm-Module erfordern könnte.

Ihre Ordnerstruktur sollte nun so aussehen:

root-project-folder
|-functions
|--package.json
|--node_modules
|---geopoint
|--geospatial
|---handler.js
|-package.json
|-node_modules
|--geopoint

Der Vorteil ist auch hier, dass Sie nur die npm-Abhängigkeiten bereitstellen können, die Ihre Funktionen benötigen, ohne dass die Serverless Ihre Ressourcen bereitstellen muss.

Hoffentlich hilft das - wieder einmal nicht sicher, ob dies die beste Vorgehensweise ist, genau das, was ich tue, weil dies an keiner Stelle dokumentiert ist, die ich im Serverless-Repository oder in einem Beispielcode finden könnte.

21
e_m0ney

Die beste Lösung für mich war Serverless Plugin: Serverless-Plugin-Include-Abhängigkeiten

serverless-plugin-include-Abhängigkeiten

1
Maximi

Sie können Folgendes tun:

# serverless.yml
custom:
  webpack:
    includeModules:
      packagePath: '../package.json' # relative path to custom package.json file.

Referenzdokument

0
Marcin Rapacz