Next.js + 云开发Webify 打造绝佳网站

news/2024/5/17 13:16:54/文章来源:https://blog.csdn.net/TCB_CloudBase/article/details/120227483

Next.js酷在哪里?

之前使用 Next.js + strapi 做了一个简单博客站点也顺道写了一篇 Next.js 简明教程,之后 Next 本身一直在迅猛发展。利用代 js 能力来说做到了:

  • 极佳的开发体验
  • 极佳的网站最佳的”动“,“静”平衡

从特性上来说,支持:

  • SSR(Server Side Rendering)
    提供 getServerSideProps 方法,在用户访问时请求数据,适用于实时数据页面。
  • SSG(Static Site Generation)
    提供 getStaticProps,getStaticPaths 方法来预先生产静态页面;

而更酷的一点是:使用 fallback,revalidate 来支持一定的动态性。

这种能“动”的 SSG 自然是我所需要的,保持静态访问,而又能在我新增修改文章的时候,站点能够自动更新。绝佳!!

为什么还需要来Webify“折腾”一番?

既然上面已经很酷了,为什么会有今天的文章,为什么还需要折腾一番?

原因也很简单:成本略高,为了不错的访问速度,你需要一台性能不错的虚拟机,一定的带宽。对于一般个人博客,投入不划算。

在这里就隆重地有请我们的解决方案:腾讯云开发Webify,简单来说就是类似 vercel 的 Serverless 托管服务,不过支持更多的框架,而且是国内服务商,便宜且访问速度一流。

有图为证:
图片

而且现在托管,能免费领300元无门槛代金券,香啊~感兴趣的可以点击下方链接了解一下:https://cloud.tencent.com/developer/article/1871549

CloudBase Webify实战

对于一般文章使用类似 github 管理的就简单了,Webify支持版本 Github、Gitlab、Gitee 服务商,听说即将支持 Coding:

  • Vue.js (vue-cli)
  • React.js (create-react-app)
  • Hexo
  • Gatsby.js
  • Angular
  • Next.js SSG
  • Nuxt.js SSG
  • 以及自动适配框架

以本博客 next 为例,Webify实际上使用时了 next export 的能力,构建后,直接部署静态文件到 server。

如果你的博客文章,直接使用 md,git 管理,看到这里就OK了,git 提交,Webify自动会重新部署你的站点。cool~~

问题是如果你的站点数据来源于类似 strapi 这种 serverless cms 怎么办?next export 不支持next SSG中“动”的特性(fallback,revalidate)。

Webify高阶——自动化Webify

其实方法也很简单,加一个桥接服务,让你的 serverless cms 的更新变动到 git 就好。

具体以 strapi 为例子:

  1. strapi 数据发布
  2. web hook到自定义的桥接服务。
  3. 桥接服务更新站点git。
  4. Weify触发重新部署。

当然如果后续 webify 支持更多的重新部署方式,这里会更简单一点。

这样乍看,似乎又回到了原点,我们还是需要一台服务器,这里又要引入本文的另一个嘉宾了,tcb 云函数。上述这种按需调用的服务,使用云函数最合适了,你不需要一个一直开机的虚拟机,你只需要在更新文章时候才需要唤起云函数就好,随用随停,成本低廉。

按照本博客的场景,我们让桥接服务在运行的时候,自动生成站点的 sitemap 到github来一举两得。

  • 用来sitemap生成站点地图xml;
  • 使用@octokit/rest,@octokit/plugin-create-or-update-text-file来更新github中文件。

下面是精简过的代码:

生成站点地图sitemap.xml

const {SitemapStream,streamToPromise
} = require('sitemap')
const {Readable,Transform,pipeline
} = require('stream')
const {apiRequest,getPostsWithGraphql
} = require('./request')
const PaginationLimit = 30
module.exports = ({hostname,cmsUrl
}) => {async function getPostSitemap() {const smStream = new SitemapStream({hostname,});let page = 0;const postStream = new Readable({objectMode: true,async read(size) {const result = await getPostsWithGraphql(`${cmsUrl}/graphql`, page++, PaginationLimit);if (result.error || !Array.isArray(result.data.posts)) {this.push(null);} else {result.data.posts.forEach((item) => {this.push(item);});if (result.data.posts.length < PaginationLimit) {this.push(null);}}},});const trans = new Transform({objectMode: true,transform(data, encoding, callback) {callback(null, {url: `/p/${data.book.slug || data.book.uuid}/${data.slug || data.uuid}`,changefreq: 'daily',priority: 1,lastmod: new Date(data.updated_at),});},});const buffer = await streamToPromise(pipeline(postStream, trans, smStream, (e) => {// throw e;}))return {path: 'public/sitemap.xml',content: buffer.toString()}}return Promise.all([// getHomeSitemap(),// getBookSitemap(),getPostSitemap()])
}

更新Github中文件

'use strict';
const {Octokit
} = require("@octokit/rest");
const {createOrUpdateTextFile,
} = require("@octokit/plugin-create-or-update-text-file");
const {throttling
} = require("@octokit/plugin-throttling");
const getSitemaps = require('./sitemap')const MyOctokit = Octokit.plugin(createOrUpdateTextFile, throttling);exports.main = async (event, context) => {const {headers: {authorization,'x-strapi-event': strapiEvent},body} = event;const {model,entry} = JSON.parse(body)const {CMS_TOKEN,GITHUB_ACCESS_TOKEN,BLOG_URL = 'https://hicc.pro',CMS_URL = 'https://cms.hicc.pro'} = process.env;// strapi 上添加密钥来确保安全if (CMS_TOKEN !== authorization) {return {doTrigger: false}}let doTrigger = false // TODO: 识别真正的发布const siteMaps = await getSitemaps({hostname: BLOG_URL,cmsUrl: CMS_URL})const octokit = new MyOctokit({auth: GITHUB_ACCESS_TOKEN,throttle: {onRateLimit: (retryAfter, options) => {console.warn(`Request quota exhausted for request ${options.method} ${options.url}`);// Retry twice after hitting a rate limit error, then give upif (options.request.retryCount <= 2) {console.log(`Retrying after ${retryAfter} seconds!`);return true;}},onAbuseLimit: (retryAfter, options) => {// does not retry, only logs a warningconsole.warn(`Abuse detected for request ${options.method} ${options.url}`);},},});await Promise.all(siteMaps.map(({path,content}) => {return octokit.createOrUpdateTextFile({// replace the owner and email with your own detailsowner: "xxx",repo: "xxx",path,message: `feat: update ${path} programatically`,content: content,branch: 'master',sha: '',committer: {name: "xxx",email: "xxxx@outlook.com",},author: {name: "xxx",email: "xxxx@outlook.com",},})}))return {doTrigger}
};

作者:hicc,腾讯高级前端开发工程师。

欢迎访问Webify官网:https://webify.cloudbase.net/

个人站点扶持:https://webify.cloudbase.net/blog/personal-site-plan

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_816644.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十年老站长心声:我为什么选择把 Hexo 网站迁移到 Webify

前 言 我的这个博客站点大约始建于2010年以前&#xff0c;使用过 dlog、pjblog、zblog 等博客程序&#xff0c;也手动建立使用过纯静态 HTML 页面&#xff0c;大约2010年开始使用 WordPress。最近几年有感于 WordPress 过于臃肿复杂&#xff0c;而我的目的只是想写点什么&…

不套用模版,用微搭低代码开发企业门户网站

移动互联网时代&#xff0c;要快速打造企业品牌形象&#xff0c;越来越多企业选择小程序、H5等移动端形态构建门户网站。 如果拥有自己的门户网站&#xff0c;就意味着企业能够覆盖用户的更多碎片时间&#xff0c;使自己的品牌更加深入人心&#xff0c;使客户咨询等服务更加便…

内蒙古包钢钢管:用腾讯云微搭搭建企业门户网站,开启传统企业数字化转型之路

包钢钢管厂研发负责人&#xff1a; 作为一个国有的钢管厂企业&#xff0c;我们需要一个简单便捷、快速高效的搭建工具&#xff0c;联通我们的员工和客户&#xff0c;而微搭就是这样一款工具&#xff0c;它与微信和企业微信原生地互相结合。 企业背景 在我国行业数字化浪潮的趋…

php 企业网站 mail_花都新零售企业管理系统价位

花都新零售企业管理系统价位 ewttre花都新零售企业管理系统价位 实际上软件设计的主要任务就是将软件分解成模块是指能实现某个功能的数据和程序说明、可执行程序的程序单元。如今的短视频&#xff0c;沦为抄袭的重灾区。一些优质的短视频&#xff0c;未经允许被“搬运工”和“…

网站无法连接mysql_nacos无法连接mysql的解决方法

原因nacos的pom依赖的mysql版本与mysql版本不一致导致步骤1&#xff1a;修改pom文件中mysql为对应版本依赖mysqlmysql-connector-java8.0.19步骤2&#xff1a;building项目解决编译报错(删除旧依赖)步骤3&#xff1a;重新打包 mvn -Prelease-nacos -Dmaven.test.skiptrue clean…

iis服务器怎么部署php网站,iis服务器怎么部署php网站

iis服务器怎么部署php网站 内容精选换一换华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档&#xff0c;帮助您快速上手使用华为云服务。PHPWind(简称&#xff1a;PW)是一个基于PHP和MySQL的开源…

html5标签seo的作用,seo标签是什么意思,简述seo网站标签的作用

在HTML代码中&#xff0c;能适当布局一些优化标签&#xff0c;会给网站带来意想不到的结果。那么关于SEO优化标签的用处你真的知晓么&#xff1f; 跟随赢客互动小编的脚步一起认识下以下这些seo标签吧&#xff01;1.标题标签在网页html代码中标签是定义在最重要的标题&#xff…

linux国产操作系统下载网站,三分钟快速安装国产操作系统Ylmf OS

雨林木风旗下国产操作系统Ylmf OS 4.0已经发布&#xff0c;(具体见http://www.linuxidc.com/Linux/2011-06/36739.htm)靓丽清爽的系统界面和丰富的系统应用立刻引起广大网友的热烈关注。但是不少网友对Linux操作系统有天生的恐惧感&#xff0c;担心其复杂的分区操作和安装方法对…

王者荣耀测试自己本命英雄软件,王者荣耀本命英雄测试网站分享 2021本命英雄测试入口...

王者荣耀本命英雄测试网站在其中还是非常的有用的&#xff0c;根据我们的性格能够给我们带来不同的选择&#xff0c;每个在面对相同的情况都是会做出不同的选择的&#xff0c;根据这些选择&#xff0c;我们能够找到最适合我们的英雄&#xff0c;下面就是具体的王者荣耀本命英雄…

让搜索引擎快速收录网站

让搜索引擎快速收录网站或许很多朋友面临这样的窘境&#xff0c;网站刚上线&#xff0c;提交完搜索引擎&#xff0c;可是搜索引擎并没有马上收录网站&#xff0c;而是过了很长一段时间才收录网站的首页。这是一个可能让人发疯的问题&#xff0c;如果每一个新站都等很长一段时间…

针对Seoer提出的争议性问题进行解答

很多东西都没有唯一、没有绝对&#xff0c;seo技术和知识同样也是如此&#xff0c;可能适合自己的优化方法和套路&#xff0c;对别人不会起到多少的效果&#xff0c;因为seo是一个综合性的评判&#xff0c;它跟行业的不同、网站的不同、甚至细节的不同都会有截然不同的结果&…

边玩边学,15个学习Python 的编程游戏网站!

经常听到有朋友说&#xff0c;学习编程是一件非常枯燥无味的事情。其实&#xff0c;大家有没有认真想过&#xff0c;可能是我们的学习方法不对&#xff1f; 比方说&#xff0c;你有没有想过&#xff0c;可以通过打游戏来学编程&#xff1f; 今天我想跟大家分享几个网站&#…

关于下载cuda和cudnn官方网站访问不了的替代方案

一、背景 最近一段时间在做深度学习Tensorflow2.x的项目&#xff0c;由于涉及到了docker环境下的tensorfow的GPU加速&#xff0c;于是我就在电脑(飞行堡垒)装双系统win10ubuntu&#xff0c;后改成了win10上面装WSL(Win10的linux子系统)。由于前边装双系统的过程中系统出了一些…

url后面的参数是什么_网络运营之SEO优化:如何做网站URL优化

网站URL链接是组成一个完整网站不可缺少的重要部分&#xff0c;在日常工作和生活中&#xff0c;我们几乎脱离不了URL链接。当前主流搜索引擎的存在也是依靠海量的URL链接才能正常运作&#xff0c;网站SEO优化工作同样需要考虑URL链接的优化。今天就跟大家聊聊“SEO优化之如何做…

6月第4周国内B2B类网站排名Top15:阿里巴巴居首

IDC评述网(idcps.com)07月03日报道&#xff1a;根据国际统计机构Alexa公布的最新数据显示&#xff0c;6月第4周&#xff08;2013-06-24至2013-06-30&#xff09;&#xff0c;我国B2B类网站中&#xff0c;阿里巴巴以100538的周均用户覆盖数摇摇领先于其他网站&#xff0c;持续稳…

读后小结:《大型网站技术架构:核心原理与案例分析》

浏览《大型网站技术架构&#xff1a;核心原理与案例分析》&#xff0c;然后作了一个小结(下图)&#xff0c;作为知识结构梳理&#xff0c;分享大家&#xff0c;并以备参考。 PS&#xff1a;需要在新窗口/标签打开&#xff0c;或下载&#xff0c;才可查看原图。 於霄云中心 20…

linux文字命令窗口怎样截图,命令行程序创建网站截图(在Linux上)

慕森卡更多细节可能有用......在控制台上或使用vncserver在X会话中启动firefox(或其他浏览器)。您可以使用--height和--width选项将窗口大小设置为全屏。另一个firefox命令可用于设置第一个firefox窗口中显示的URL。现在&#xff0c;您可以使用以下几个命令之一来获取屏幕图像&…

织梦高端婚纱摄影网站织梦模板(带手机端

模板介绍&#xff1a; 织梦最新内核开发的模板&#xff0c;该模板属于营销型企业通用类、婚纱摄影、婚纱拍摄类企业都可使用&#xff0c; 这款模板使用范围极广&#xff0c;不仅仅局限于一类型的企业&#xff0c;你只需要把图片和产品内容&#xff1b; 换成你的&#xff0c;颜…

自动秒收录网站源码

自动秒收录网站源码 源码简介 1.导入数据库文件 2.修改config.php文件里的数据库信息 3.后台地址&#xff1a;域名/admin/ 4代理地址&#xff1a;域名/app/ 5.后台用户名和密码统一为&#xff1a;admin 6.需要修改首页信息的文件是&#xff1a;index.php 学习资料地址&am…

在线图片编辑器/在线视频剪辑器/网站源码

源码简介 具体有三个功能&#xff0c; 1.多功能图片转换器 2.视频字幕拼接工具 3.批量加水印 学习资料地址&#xff1a;在线图编辑器在线视频剪辑器网站源码.zip - 蓝奏云