2017-07-01 56 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端點(假設您正在使用api調用觸發,而不是s3)。

我結束了這樣的結構:

|- 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 

我用的是無服務器的WebPack插件輸出的各個功能到dist/目錄。 serverless.yaml然後指向這些。

webpack.config.js看起來是這樣的:

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. 

之後,只要確保你設置的個人標誌serverless.yml

package: 
    individually: true 

的的WebPack插件是相當不錯的,並做最繁重的工作。有了這個功能,我可以執行一次部署,所有功能最終都會作爲單個lambda函數在一個api端點下完成。您還可以獲得Webpack開發服務器,以便您可以運行serverless webpack serve來測試您的功能。

這是一個有點痛苦的設置,但它一直工作得很好。