在现代 Web 应用开发中,前端工程化是不可避免的趋势,其中打包工具 webpack 可以让我们方便地将多个 JavaScript 模块打包成一个 bundle,以提升前端性能。然而,这种单页面应用(SPA)构建方式也会带来一些问题,其中就包括搜索引擎无法抓取 SPA 中的内容,从而影响 SEO。因此,需要一种解决方案,即使用服务端渲染(SSR)来让 SPA 的页面内容能够被搜索引擎抓取。这时候, FastBoot 就派上用场了。
FastBoot 是由 Ember.js 社区开发的一套基于 Node.js 的 SSR 解决方案,可以通过在服务端运行 Ember.js 应用,将生成的 HTML 传递给客户端,让搜索引擎可以抓取到页面内容。FastBoot 在实现了 SSR 的同时,还提高了首屏加载时间和 SEO 发现性能。
在实际应用中,我们常常需要基于 FastBoot 快速构建并部署 SSR 应用,这时候就需要使用 ember-cli-deploy-fastboot-api-lambda 这个 npm 包。它提供了一种将 FastBoot 和 AWS Lambda 相结合的部署方案,可以通过 AWS Lambda 快速的搭建一套自用的 FastBoot 服务。
安装和使用
使用 ember-cli-deploy-fastboot-api-lambda 部署 FastBoot 服务的过程,需要掌握以下几个步骤:
- 构建 Ember.js 应用,生成 FastBoot 模式支持的文件。
- 将构建产物上传至 AWS S3。
- 使用 AWS CloudFormation 模板创建服务器和 Lambda 函数。
- 部署 Ember.js 应用的生成物到 S3。
- 测试 FastBoot 服务。
接下来,将详细介绍以上几个步骤。
步骤一:构建 Ember.js 应用
首先,我们需要构建一个能够支持 FastBoot 模式的 Ember.js 应用。
ember build --environment=production
构建完毕后,在项目的 dist 目录下,就会生成 fastboot-app-server 目录,其中包含了 FastBoot 服务需要的生成物。将该目录上传至 AWS S3,以便后续步骤的使用。
步骤二:上传至 AWS S3
在 AWS S3 控制台中,创建一个新的 Bucket,将 fastboot-app-server 目录上传至该 Bucket 中。在此过程中,可以将 Bucket 的权限设置为公共可读,以便 FastBoot 服务能够正常运行。
步骤三:使用 CloudFormation 模板创建服务
在 AWS Lambda 中,使用 CloudFormation 模板创建一组新的 Amazon API Gateway 和 AWS Lambda 部署。
在 AWS Lambda 控制台中,进入 FastBoot 服务所在的代码包目录,进入到 cloudformation 目录,运行以下命令:
cd cloudformation aws cloudformation create-stack \ --stack-name fastboot-lambda \ --capabilities CAPABILITY_IAM \ --template-body file://./fastboot-lamdba.yml \ --parameters ParameterKey=BucketName,ParameterValue=<YOUR_BUCKET_NAME>
其中,YOUR_BUCKET_NAME 为步骤二中创建的 S3 Bucket 的名称。运行上述命令,即可完成 CloudFormation 模板的创建。在 CloudFormation 的输出中,会有生成的 API Gateway 和 Lambda 函数的 URL。将该 URL 记录下来,以便后续访问 FastBoot 服务。
步骤四:部署 Ember.js 应用的生成物到 S3
使用以下命令,将步骤一中构建所得的 fastboot-app-server 目录上传至步骤二中创建的 S3 Bucket 中。
aws s3 sync dist/fastboot-app-server s3://<YOUR_BUCKET_NAME>/fastboot-app-server
同样地,YOUR_BUCKET_NAME 为步骤二中创建的 S3 Bucket 的名称。
步骤五:测试 FastBoot 服务
在浏览器中,访问步骤三中记录的 URL,即可看到 FastBoot 服务的首页。此时,FastBoot 服务的部署即完成。
结语
本文介绍了如何使用 ember-cli-deploy-fastboot-api-lambda 包快速构建并部署 FastBoot 服务。当然,本文只是快速上手教程,如果你需要使用 FastBoot 扩展更加复杂的功能,建议参考 FastBoot 官方文档和其他相关文献。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005560e81e8991b448d3065