24

私の状況では、サーバーレス フレームワーク プロジェクトに外部 NPM パッケージを追加する際に少し問題があります (特定のパッケージは geopoint です)。

Serverless プロジェクトのルート フォルダーに移動し、npm install geopoint --save. package.json が更新されdependencies": { "geopoint": "^1.0.1" }、node_modules フォルダーが作成されました。

私のフォルダー構造は次のようになります:
root-project-folder
-functions
--geospatial
---handler.js
-node_modules
--geopoint

functions/geospatial/handler.js で、ジオポイント モジュールを次のように宣言しました。

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

ラムダ コンソールは次のエラーを返します。

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

外部 NPM モジュールを Serverless Framework プロジェクトに正しく追加するにはどうすればよいですか?

4

4 に答える 4

28

あなたが経験していることは、私が最近経験したことと同じだと思います。アプリケーションのルート ディレクトリに npm パッケージをインストールできましたが、ラムダには何もデプロイされませんでした。

私の理解では、サーバーレスは各コンポーネント ディレクトリ (アプリケーション ルートの下のサブディレクトリ) の下にすべてをデプロイします。あなたの場合、下functions

これに関するサーバーレスのドキュメントにはあまり見つかりませんでしたが、package.json自分のフォルダーの下にファイルを定義functionsし、そのサブディレクトリで npm install を実行しました。次に、ラムダにデプロイした後、node_modulesこのディレクトリの下にもデプロイされました。これは、関数コードがこれらの npm モジュールのいずれかを必要とする可能性があることを意味します。

したがって、フォルダー構造は次のようになります。

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

ここでの利点は、サーバーレスがリソースをデプロイするために必要とする依存関係を必要とせずに、関数が必要とする npm 依存関係のみをデプロイできることです。

これが役立つことを願っています-もう一度、これがベストプラクティスであるかどうかはわかりません。これは、サーバーレスリポジトリまたはサンプルコードで見つけることができる場所に文書化されていないためです。

于 2016-05-11T23:56:29.660 に答える