web-dev-qa-db-fra.com

Serverless Framework: Comment ajouter des packages NPM externes?

Ma situation est que j'ai quelques difficultés à ajouter des packages NPM externes à mon projet Serverless Framework (le package spécifique est un géopoint). 

Je suis allé dans le dossier racine du projet Serverless et ai exécuté npm install geopoint --save. package.json a été mis à jour avec dependencies": { "geopoint": "^1.0.1" } et le dossier node_modules a été créé.

Ma structure de dossier ressemble à ceci:
root-project-folder
-les fonctions
-- géospatial
--- handler.js
- node_modules
-- géopoint

Dans mes fonctions/geospatial/handler.js, j'ai déclaré le module geopoint avec:

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

La console lambda renvoie une erreur de:

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

Comment ajouter correctement des modules NPM externes à un projet Serverless Framework?

15
taptipblard

Je pense que ce que vous vivez est le même que ce que je vivais récemment. Je pourrais installer les paquets npm dans le répertoire racine de mon application, mais rien ne serait déployé sur lambda.

Je crois comprendre que sans serveur déploie tout sous chaque répertoire de composant (sous-répertoire situé sous la racine de l'application). Dans votre cas, sous functions.

Je n'ai pas trouvé grand chose dans la documentation sans serveur autour de cela, mais ce que j'ai fait est de définir un fichier package.json dans mon dossier functions, puis d'exécuter une installation npm dans ce sous-répertoire. Ensuite, après le déploiement sur lambda, le node_modules sous ce répertoire a également été déployé, ce qui signifie que mon code de fonction pourrait nécessiter l'un de ces modules npm.

Donc, la structure de votre dossier devrait maintenant ressembler à ceci:

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

L'avantage ici est que vous ne pouvez déployer que les dépendances npm dont vos fonctions ont besoin, sans celles dont le sans serveur a besoin pour déployer vos ressources.

Espérons que cela aide - encore une fois, je ne suis pas sûr que ce soit la meilleure pratique, juste ce que je fais parce que cela n'est documenté nulle part que je pourrais trouver sur le référentiel Serverless ou dans un exemple de code.

21
e_m0ney

Pour moi, la meilleure solution était le plug-in Serverless: serverless-plugin-include-dependencies

serverless-plugin-include-dependencies

1
Maximi