Nextjs Contentful GraphQL Vercel Edges
配置contentful
1. 创建免费账号
2. 根据提示进行操作,
Content Model - 创建页面属性模板 (personalWebsite)
content entry - 根据属性模板,添加内容,最后发布
API call - 发布后,可以使用Graph QL 或者 REST Api 获取内容
在Settings -> API Keys 中,添加新的API key. (系统默认会创建几个,所以可以直接使用或者自己创建.)
保存Space ID, Content Delivery API - access token, 如果有预览网页的话,可以保存下Content Preview API - access token
2. 创建react项目,这里我创建的是Nextjs项目
npx create-next-app@latest --typescript
Next中有关于GraphQL的模板,我没有使用: npx create-next-app next-with-apollo
使用Apollo Client插件来连接API
npm install @apollo/client graphql
初始化Apollo - `apollo-client.js`
// apollo-client.ts
import { ApolloClient, InMemoryCache } from "@apollo/client";
const client = new ApolloClient({
uri: `https://graphql.contentful.com/content/v1/spaces/${process.env.CONTENTFUL_SPACE_ID}/environments/master?access_token=${process.env.CONTENTFUL_DELIVERY_API_KEY}`,
cache: new InMemoryCache(),
});
export default client;
Query 部分,点击Open GQL Playground会给你基本模板,然后添加自己需要的属性ID就可以

下面是我的主页代码, 调用GraphQL 来获取Contentful数据
// page/index.tsx
const Home: NextPage = (props:any) => {
const {contentfulData} = props
return (
<div className={styles.container}>
{
JSON.stringify(contentfulData)
}
</div>
)
}
export async function getStaticProps() {
const {data} = await client.query({
query: gql`
query contentfulData {
lasalleCollege(id: "5vl5HzuiPl2LaZfbvLDKya") {
lciCampuses,
title
}
}
`,
});
return {
props: {
contentfulData: data,
},
};
}
export default Home
Jest - Unit 测试
根据官方文档即可 https://nextjs.org/docs/testing#jest-and-react-testing-library
// package.json
"test": "jest",
“test-c": "jest --coverage"
4. Cypress - E2E 测试
同样根据官方文档即可https://docs.cypress.io/guides/getting-started/installing-cypress
//package.json
"cypress": "cypress run", // 命令行测试
"cypress-open": "cypress open", // 打开UI窗口进行测试
创建测试文件 cypress/e2e/spec.cy.ts
describe('Check Vercel Preview', () => {
it('Check Campus', () => {
cy.visit(`https://xxxxxxxxxxxxxxxxxxxxxxxx`)
// cy.visit(`http://localhost:3000`)
cy.get('#Montreal h1').should('have.length', 1)
cy.get('#Vancouver h1').should('have.length', 1)
})
})
5. Vercel 的关联
方法一(此方法只适用于部署,不适用于 测试+部署 )
- 关联github,并选择需要的仓库
- 在仪表板界面
- Add New添加新项目, 选择对应仓库,并import
- 如果没有特殊要求来配置build命令,启动命令,可以直接使用默认选择,有需求可以修改
- 如上中需要用到ENV值,所以需要在项目的 Settings -> Environment Variables中配置所需的ENV参数, 否则在build过程中会失败,它会自动调用接口测试是否成功

- 另外,vercel关联项目后,会自动根据push,自动重新部署项目。
- 如果先要使用vercel自带的Analytics,需要开启并重新部署项目。(注意:个人账户只能对一个项目启动该功能), 步骤很简单,根据提示点击即可
- Edge
- 同样在Edge Config中点击connect Store来链接项目
方法二(通过Github的action来进行CICD)
- 本地安装vercel cli
- npm i -g vercel 全局安装
- vercel --version 检测是否安装成功
- 在项目目录下运行 vercel
- 根据提示步骤进行操作
- 结束会生成
.vercel文件夹,project.json中有当前项目所对应的`orgId` 和 `projectId`
- 项目根目录下(同.vercel), 创建文件.github/workflows/deploy.yml
- 此处会用到vercel-action插件
- 然后进行yml的配置,如下为我的配置,部署前进行Jest 单元测试,然后部署到preview,最后进行E2E测试
name: Deploy CI
on:
push:
branches:
- main
pull_request:
types: [opened, synchronize, reopened]
jobs:
Unit_Test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '16'
- name: Install dependencies
run: npm install
- name: Unit Test
run: npm run test
Deploy_Vercel:
needs: [Unit_Test]
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, '[skip ci]')"
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '16'
- name: Deploy to Vercel Action
uses: amondnet/vercel-action@v20 #deploy
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }} # Required
github-token: ${{ secrets.GH_TOKEN }} #Optional
vercel-org-id: ${{ secrets.VERCEL_ORG_ID}} #Required
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID}} #Required
E2E_Test:
needs: [Deploy_Vercel]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '16'
- name: Install dependencies
run: npm install
- name: Cypress Test
run: npm run cypress
- 本地安装vercel cli
Nextjs Contentful GraphQL Vercel Edges的更多相关文章
- 使用ASP.NET Core开发GraphQL服务器 -- 预备知识(下)
上一篇文章:https://www.cnblogs.com/cgzl/p/9734083.html 处理数据 嵌套字段 看例子: 我想查看viewer下的repositories.注意里面的edges ...
- 记一次通过c#运用GraphQL调用Github api
阅读目录 GraphQL是什么 .net下如何运用GraphQL 运用GraphQL调用Github api 结语 一.Graphql是什么 最近在折腾使用Github api做个微信小程序练练手,本 ...
- 转 GraphQL Schema Stitching explained: Schema Delegation
转自官方文档 In the last article, we discussed the ins and outs of remote (executable) schemas. These remo ...
- GraphQL 优势之处
一次查询,搞定需求 举个例子,Book对象有bookTypeId,那我想看对应的bookTypeName,bookType对应的summary咋办? 如果你用RESTful Api ,免不了要定制接口 ...
- 七月小说网 Python + GraphQL (三)
概述 后台数据库几个基本表基本搭建完毕,看了下Github Develop的V4 Api抛弃了RESTful,采用GraphQL,感觉很有意思,一看文档,竟然有Python的开源实现 Graphene ...
- GraphQL漏洞案例之获取Facebook任意用户的朋友列表和部分支付卡详细信息
Facebook有一个GraphQL endpoint,只能由Facebook的某些应用程序使用.需要用户(或页面)access_token来查询GraphQL endpoint. 这里可以将Face ...
- Spring Boot GraphQL 实战 03_分页、全局异常处理和异步加载
hello,大家好,我是小黑,又和大家见面啦~ 今天我们来继续学习 Spring Boot GraphQL 实战,我们使用的框架是 https://github.com/graphql-java-ki ...
- Facebook的Web开发三板斧:React.js、Relay和GraphQL
2015-02-26 孙镜涛 InfoQ Eric Florenzano最近在自己的博客上发表了一篇题为<Facebook教我们如何构建网站>的文章,他认为软件开发有些时候需要比较大的跨 ...
- facebook graphql
思想先进,前端直接从后台调用所需要的数据. 最简单的理解: 从"select * from 学生表" 进化为"select name, sex from 学生表" ...
- Graphql介绍(Introduction to GraphQL)
Introduction to GraphQL GraphQL介绍 Learn about GraphQL, how it works, and how to use it in this seri ...
随机推荐
- 迷宫机器人最短路径使用tkinter绘制
起因 我想要写一个玩家和机器对战的迷宫游戏.这个项目我没有写完,我实现了最短机器人路径并绘制在tkinter上,以及玩家移动的功能.更多的关于GUI的设计太花时间了我没有写完. 算法介绍 我在写机器人 ...
- CF1779C Least Prefix Sum 题解
CF链接:Least Prefix Sum Luogu链接:Least Prefix Sum $ {\scr \color {CornflowerBlue}{\text{Solution}}} $ 先 ...
- 浏览器刷新时候不删除信息,关闭后删除用户信息处理办法,浏览器监听刷新以及删除事件、cookie、session、sessionStorage、localStorage区别
首先我们可以了解到:sessionStorage 不在不同的浏览器窗口中共享,即使是同一个页面: localStorage 和 cookie 在所有同源窗口是共享的 那么我们可以根据用户不同需求来进行 ...
- 【Regex】判断密码强度的正则表达式
原文地址 https://www.cnblogs.com/younShieh/p/17082522.html 如果本文对你有所帮助,不妨点个关注和推荐呀,这是对笔者最大的支持~ 需求 最近 ...
- 【学习笔记】C/C++ 设计模式 - 工厂模式(上)
介绍说明 在年初七的时候,学习了工厂模式,今天在复习的时候发现漏了几个知识点,因此重写这篇文章,以循环渐进的描述方式来对比不同的使用技巧. 工厂设计模式属于 "创建型设计模式",在 ...
- 【HMS Core】机器学习服务助力APP快速集成图像分割与上传功能
1.介绍 总览 机器学习服务(ML Kit)提供机器学习套件,为开发者使用机器学习能力开发各类应用,提供优质体验.得益于华为长期技术积累,ML Kit为开发者提供简单易用.服务多样.技术领先的机器 ...
- vue3.0+echart可视化
vue3.0 + echart可视化 案例1: 案例代码 <template> <div ref="test" style="width:800px;h ...
- Android JetPack~ ViewModel (一) 介绍与使用
Android数据绑定技术一,企业级开发 Android数据绑定技术二,企业级开发 Android JetPack~ DataBinding(数据绑定)(一) 集成与使用 Android ...
- 研究c#异步操作async await状态机的总结
前言 前一段时间得闲的时候优化了一下我之前的轮子[DotNetCoreRpc]小框架,其中主要的优化点主要是关于RPC异步契约调用的相关逻辑.在此过程中进一步了解了关于async和await异步操作相 ...
- Win10解决文件或文件夹属性选项中只有“常规“、“以前的版本”,没有“安全”、“共享”、“位置”的方法
问题介绍: 当我想要把"桌面"文件夹的路径改到其他盘的时候,通常我只需要对着"桌面"文件夹点击右键,在属性-位置的选项卡中更改路径即可:但是我发现我在对着&qu ...