Mar*_*ate 5 aws-lambda next.js serverless
我想简单地使用前面的 API 网关将我的 Next.js 9 部署到 AWS Lambdas 并为指向 S3 的静态路径创建代理,但唯一可用的选项(无需从头开始编写所有内容)是https://github.com/serverless-nextjs/serverless-next.js目前正在使用无服务器组件的测试版(由于不使用 CloudFormation,因此非常有问题并且无法控制创建的资源),这也是 SLS 组件的力量用户使用 CloudFront 这不是我的需要,我一直在创建 PR 环境,为此分配 CloudFront 只是浪费时间/金钱/资源。
我尝试使用旧版本的插件,serverless-nextjs-plugin但它似乎不适用于 Next.js 9,它无法为 .html 生成的页面创建 Lambda。
这条隧道的尽头有光吗?
https://github.com/serverless-nextjs/serverless-next.js/issues/296通过这个问题,看起来没有办法做到这一点。
我设法让它发挥作用
serverless.base.yml文件:
service: my-app
provider:
name: aws
runtime: nodejs12.x
timeout: 10 # seconds
memorySize: 1792 # Mb
custom:
webpack:
packager: yarn
includeModules:
forceInclude:
- chalk
functions:
nextJsApp:
handler: server.handler
events:
- http: 'ANY /'
- http: 'ANY {proxy+}'
Run Code Online (Sandbox Code Playgroud)
server.js:
const { parse } = require('url');
const next = require('next');
const serverless = require('serverless-http');
const app = next({
dev: false
});
const requestHandler = app.getRequestHandler();
export const handler = serverless(async (req, res) => {
const parsedUrl = parse(req.url, true);
await requestHandler(req, res, parsedUrl);
});
Run Code Online (Sandbox Code Playgroud)
wepback.config.js:
const CopyWebpackPlugin = require('copy-webpack-plugin');
const nodeExternals = require('webpack-node-externals');
module.exports = {
...
externals: [nodeExternals()],
plugins: [
new CopyWebpackPlugin({
patterns: [
{ from: '.next', to: '.next' },
{ from: 'public', to: 'public' }
]
})
]
};
Run Code Online (Sandbox Code Playgroud)
这是使用 serverless 和 webpack 的技巧,使用 aserverless.js修改serverless.base.yml并将所有依赖项添加到要包含在捆绑包中的所需依赖项中:
const yaml = require('yaml-boost');
const minimist = require('minimist');
const path = require('path');
module.exports = (() => {
const params = minimist(process.argv.slice(2));
const serverless = yaml.load(path.join(__dirname, 'serverless.base.yml'), params);
const packageJson = require(path.join(__dirname, 'package.json'));
const dependencies = Object.keys(packageJson.dependencies);
serverless.custom.webpack.includeModules.forceInclude.push(...dependencies);
return serverless;
})();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1614 次 |
| 最近记录: |