配置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 的关联

  方法一(此方法只适用于部署,不适用于 测试+部署 )

    1. 关联github,并选择需要的仓库
    2. 在仪表板界面
      • Add New添加新项目, 选择对应仓库,并import
      • 如果没有特殊要求来配置build命令,启动命令,可以直接使用默认选择,有需求可以修改
      • 如上中需要用到ENV值,所以需要在项目的 Settings -> Environment Variables中配置所需的ENV参数, 否则在build过程中会失败,它会自动调用接口测试是否成功

    3. 另外,vercel关联项目后,会自动根据push,自动重新部署项目。
    4. 如果先要使用vercel自带的Analytics,需要开启并重新部署项目。(注意:个人账户只能对一个项目启动该功能), 步骤很简单,根据提示点击即可
      • Edge
      • 同样在Edge Config中点击connect Store来链接项目
    5.   

  方法二(通过Github的action来进行CICD)

    1. 本地安装vercel cli
      1. npm i -g vercel  全局安装
      2. vercel --version 检测是否安装成功
      3. 在项目目录下运行 vercel
      4. 根据提示步骤进行操作
      5. 结束会生成  .vercel文件夹,project.json中有当前项目所对应的`orgId` 和 `projectId`
    2. 项目根目录下(同.vercel), 创建文件.github/workflows/deploy.yml
      1. 此处会用到vercel-action插件
      2. 然后进行yml的配置,如下为我的配置,部署前进行Jest 单元测试,然后部署到preview,最后进行E2E测试
      3. 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

Nextjs Contentful GraphQL Vercel Edges的更多相关文章

  1. 使用ASP.NET Core开发GraphQL服务器 -- 预备知识(下)

    上一篇文章:https://www.cnblogs.com/cgzl/p/9734083.html 处理数据 嵌套字段 看例子: 我想查看viewer下的repositories.注意里面的edges ...

  2. 记一次通过c#运用GraphQL调用Github api

    阅读目录 GraphQL是什么 .net下如何运用GraphQL 运用GraphQL调用Github api 结语 一.Graphql是什么 最近在折腾使用Github api做个微信小程序练练手,本 ...

  3. 转 GraphQL Schema Stitching explained: Schema Delegation

    转自官方文档 In the last article, we discussed the ins and outs of remote (executable) schemas. These remo ...

  4. GraphQL 优势之处

    一次查询,搞定需求 举个例子,Book对象有bookTypeId,那我想看对应的bookTypeName,bookType对应的summary咋办? 如果你用RESTful Api ,免不了要定制接口 ...

  5. 七月小说网 Python + GraphQL (三)

    概述 后台数据库几个基本表基本搭建完毕,看了下Github Develop的V4 Api抛弃了RESTful,采用GraphQL,感觉很有意思,一看文档,竟然有Python的开源实现 Graphene ...

  6. GraphQL漏洞案例之获取Facebook任意用户的朋友列表和部分支付卡详细信息

    Facebook有一个GraphQL endpoint,只能由Facebook的某些应用程序使用.需要用户(或页面)access_token来查询GraphQL endpoint. 这里可以将Face ...

  7. Spring Boot GraphQL 实战 03_分页、全局异常处理和异步加载

    hello,大家好,我是小黑,又和大家见面啦~ 今天我们来继续学习 Spring Boot GraphQL 实战,我们使用的框架是 https://github.com/graphql-java-ki ...

  8. Facebook的Web开发三板斧:React.js、Relay和GraphQL

    2015-02-26 孙镜涛  InfoQ Eric Florenzano最近在自己的博客上发表了一篇题为<Facebook教我们如何构建网站>的文章,他认为软件开发有些时候需要比较大的跨 ...

  9. facebook graphql

    思想先进,前端直接从后台调用所需要的数据. 最简单的理解: 从"select * from 学生表" 进化为"select name, sex from 学生表" ...

  10. Graphql介绍(Introduction to GraphQL)

    Introduction to GraphQL  GraphQL介绍 Learn about GraphQL, how it works, and how to use it in this seri ...

随机推荐

  1. 网络安全之frp内网穿透

    前言 内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机 环境需求 一台公网服务器(linux操作系统) ...

  2. Linux基础介绍

    Linux基础介绍 一.运维的本质 运维:运行维护应用程序 岗位需求:自动化运维.DBA.docker+K8s 运维的本质: 1.尽可能保证应用程序24小时不间断运行 2.尽可能保证数据的安全 3.尽 ...

  3. Win10环境下yolov8(ultralytics) 快速配置与测试

    win10下亲测有效!(如果想在tensorrt+cuda下部署,直接看第五5章) 一.win10下创建yolov8环境 # 注:python其他版本在win10下,可能有坑,我已经替你踩坑了,这里p ...

  4. Blazor入门100天 : 身份验证和授权 (2) - 角色/组件/特性/过程逻辑

    目录 建立默认带身份验证 Blazor 程序 `角色/组件/特性/过程逻辑 DB 改 Sqlite 将自定义字段添加到用户表 脚手架拉取IDS文件,本地化资源 freesql 生成实体类,freesq ...

  5. 行为型模式 - 观察者模式Observer

    学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 有一个大佬视频中提过一个案例,我觉得很棒:遥闻深巷中犬吠,边有妇人惊觉欠伸,其夫呓语.继而儿醒,大啼.夫亦醒. 模式的定义与特点 ...

  6. Kubernetes(k8s)控制器(三):ReplicationController

    目录 一.系统环境 二.前言 三.ReplicationController概览 四.ReplicationController工作机制 五.创建ReplicationController 六.扩展r ...

  7. 《Terraform 101 从入门到实践》 第五章 HCL语法

    <Terraform 101 从入门到实践>这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看. 介绍了Terraform一些 ...

  8. C语言-三子棋项目

    开源地址 https://kxd.lanzoul.com/iLwHG0e4nupc 肯定有大量BUG 求指出 电脑自动下棋的算法很差 毕竟我也没特意去研究

  9. Prufer序列 学习笔记

    \(Prufer\) 序列 \(\texttt{definition}\) \(Prufer\) 序列序列可以将一个带标号 \(n\) 个结点的树用 \([1..n]\) 中的 \(n-2\) 个整数 ...

  10. php .inc 文件

    inc 文件顾名思义是include file的意思.即PHP的包含文件,这里用后缀来表示文件的作用, inc文件一般加载一些设置 举个例子   <? php//这里是数据库连接的配置信息db. ...