配置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. 二十三、图的遍历(BFS和DFS)

    一.概念   图的遍历(Traversing Graph)从某一顶点出发,访问图中所有顶点,且使每一顶点仅被访问一次.与树的遍历不同的是,图的遍历需要处理两种特殊情况:一是从某一顶点出发进行遍历时,可 ...

  2. Ubuntu 22.04 安装 utools 时的疑难杂症

    Error: libcrypto.so.1.1 原因:libcrypto.so.1.1 该依赖的版本不对,ubuntu 默认是使用的 openssl3 的依赖 这个是 openssl1 的 wget ...

  3. 深入理解 OpenMP 线程同步机制

    深入理解 OpenMP 线程同步机制 前言 在本篇文章当中主要给大家介绍 OpenMP 当中线程的同步和互斥机制,在 OpenMP 当中主要有三种不同的线程之间的互斥方式: 使用 critical 子 ...

  4. py教学 之字符串处理·····

    访问字符串中的值 Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用. Python 访问子字符串,可以使用方括号 [] 来截取字符串,字符串的截取的语法格式如下: 变量 ...

  5. Java 进阶P-8.9+P-8.10

    文件流 File Input Stream File Output Stream 对文件作读写操作 实际工程中已经较少使用 更常用的是以在内存数据或通信数据上建立的流,如数据库的二进制数据读写或网络端 ...

  6. saas解决redis数据库分离的一种方案

    package com.xf.config; import java.util.HashMap; import java.util.Map; import java.util.Set; import ...

  7. 虚拟机配置代理(虚拟机nat)

    桥接 ​ 第一步:打开clash allow lan ​ 第二步:找到宿主机在局域网中的IP地址 ​ 第三步:配置虚拟机代理 NAT ​ 同上 注意 ​ 一.宿主机防火墙要配置好(直接关闭会也有效果, ...

  8. 主题样式选择效果代码及css样式

    先上效果图: 主要页面代码及样式: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> ...

  9. python判断密码连续,重复,大小写、数字、符号混合密码复杂度要求

    一.python 判断密码连续,重复,大小写.数字.符号混合密码复杂度要求 1. 运行环境 python 3.6.8 2. 密码必须包含大小写.数字.特殊符号中的3种且长度为8-16位 def ver ...

  10. SqlServer Express 自动备份数据库(没有sql代理服务的情况下)

    一.由于Express版本的SQLServer没有SQL代理服务(SQLSERVERAGENT),所以就不能通过SQLServer作业来进行自动备份了,那么我们可以用Windows计划任务来定时处理 ...