2017-07-01 10 views
3

私はserverlessを使って最初のプロジェクトを設定しています。私はたくさんの素晴らしい "チュートリアル"チュートリアルを見つけていますが、実際のプロジェクト構造については何も探していません。サーバレスNodeJSファイル/フォルダ構造

私の考えは、私の機能については、以下の構造、共有ライブラリとコア構成/依存関係を使用することです:

|- functions/ 
|--- users/ 
|----- handler.js 
|----- serverless.yml 
|--- roles/ 
|----- handler.js 
|----- serverless.yml 
|- shared/ 
|--- common.js 
|- node_modules/ 
|- package.json 

私の主な好奇心は、展開の周りにある、それは依存関係や共有ファイルに関連する方法。さらに、この構造のデプロイメントを自動化することは、私がスクリプトを書くことができる機能のそれぞれを個別に配備する必要があるかもしれないが、それが必要なのかアドバイスされているのか不思議である。

答えて

1

私はこれを少し扱っ​​ており、かなりイライラしています。あなたの設定から展開する場合、あなたのAPIはどのように見えるのですか?個々のserverless.yamlファイルでは、独立したapiエンドポイントになります(s3のようなものではなく、api呼び出しで起動していると仮定します)。

私はこのような構造になってしまった:私はdist/ディレクトリに個々の機能の出力にサーバーレスWebPACKのプラグインを使用

|- serverless/ 
|--- serverlsss.yml 
|--- web pack.config.js 
|--- dist/ 
|--- node_modules() /* dev and common code */ 
|--- src/ 
|----- function1/ 
|-------- node_modules 
|-------- package.json 
|-------- index.js 
|----- function2/ 
|-------- node_modules 
|-------- package.json 
|-------- index.js 

serverless.yamlは、これらを指します。ちょうどあなたがWebPACKのプラグインは非常にいいですし、重い物を持ち上げるのほとんどを行いserverless.yml

package: 
    individually: true 

で個々のフラグを設定していることを確認した後

const nodeExternals = require('webpack-node-externals'); 
const path = require('path'); 

module.exports = { 
    entry: { 
    'function1': './src/function1/index.js', 
    'function2': './src/function2/index.js', 
    }, 
    target: 'node', 
    output:{ 
    libraryTarget: 'commonjs2', 
    path: path.join(__dirname, './dist'), 
    filename: '[name].js' 
    }, 
    externals: [nodeExternals()], 
    module: { 
    loaders: [ 
     /* Babel is nice, but it's adding a some bulk and I don't need it 
     { 
     test: /\.js$/, 
     loaders: ['babel'], 
     include: __dirname, 
     exclude: /node_modules/, 
     }, */ 
     { 
     test: /\.json$/, 
     loaders: ['json']} 
    ], 
    }, 
}; 

// externals: [nodeExternals()], 
// nodeExternals seems to break aws-sdk when serving locally 
// aws-sdk should be in dev-dependencies of root folder 
// that way it's available in dev but doesn't get packaged. 
// It's available to the lambdas when deployed. 

webpack.config.jsは次のようになります。これで私は単一の展開を行うことができ、すべての関数は個々のラムダ関数として1つのAPI終点の下にすべて終わります。また、Webpack開発サーバーを入手して、serverless webpack serveを実行して機能をテストできます。

セットアップには苦労しましたが、うまくいきました。

関連する問題