无服务器NodeJS文件/文件夹结构

我正在使用无服务器设置我的第一个项目,当我find很多很好的“入门”教程时,我很难find关于实际项目结构的任何信息。

我的想法是使用下面的结构为我的function,共享库和核心configuration/依赖项:

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

我主要的好奇心是围绕部署,以及如何与依赖和共享文件有关。 此外,自动部署这个结构似乎很奇怪,因为我正在收集我需要分别部署每个函数,我可以脚本,但想知道是否需要或build议。

我已经处理了这一点,发现它非常令人沮丧。 如果你从你的设置部署,你的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插件将各个function输出到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插件是相当不错的,并承担大部分的繁重工作。 有了这个,我可以做一个单一的部署,所有的function最终作为单个lambda函数都在一个API端点下。 您还可以获得Webpack开发服务器,以便您可以运行serverless webpack serve来testing您的function。

设置起来有点痛苦,但工作得很好。