3

サーバーレスでは、次のフォルダー構造があります

/component_a/function_1/function_1.js
/component_a/lib/util.js

を使用して function_1.js から util.js をロードしようとすると

u = require('../lib/util.js')

サーバーレス CLI「サーバーレス関数実行 function_1」から動作します。ただし、 lambda/api-gateway では lib/util.js が見つかりません。

これは、「エラー: モジュール '../lib/util' が見つかりません」というエラーです。

どうすれば修正できますか?

4

1 に答える 1

3

これが修正方法です。component_a/s-function.json で置き換えます

"handler": "handler.handler",

"handler": "component_a/handler.handler",

function_1.js で、次のように util.js を呼び出します

u = require('../lib/util')

サーバーレスのドキュメントから

handler プロパティを使用すると、関数間でコードを共有できます。デフォルトでは、ハンドラー プロパティは handler.handler です。これは、関数フォルダーに対してのみ相対的であることを意味するため、関数フォルダーのみが Lambda にデプロイされます。

ただし、関数の親サブフォルダーを含めたい場合は、ハンドラーを次のように変更する必要があります。 functionName/handler.handler ご覧のとおり、ハンドラーへのパスに関数フォルダーが含まれるようになりました。現在は親サブフォルダーに相対的であるため、その場合、親サブフォルダーは関数と共にデプロイされます。そのため、関数で必要な親サブフォルダーに lib フォルダーがある場合は、関数と共にデプロイされます。

これにより、npm の依存関係を好きなように処理することもできます。その親サブフォルダーに package.json と node_modules がある場合、デプロイされたラムダに含まれます。したがって、ハンドラ パスに含める親フォルダが多いほど、ファイル ツリーの上位に移動します。

于 2016-06-07T14:35:20.920 に答える