我已经处理了一点,发现它非常令人沮丧。如果您从您的设置中部署,您的 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 来测试您的功能。
设置起来有点麻烦,但运行良好。