配置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. MySQL 表的创建、复制、修改与删除

    MySQL中如何利用代码完成表的创建.复制.修改和删除. 一.创建表 --创建新表,如果存在则覆盖 drop table [if exists] 表名; --创建新表,如果存在则返回 create t ...

  2. 图文并茂解决Client does not support authentication protocol requested by server; consider upgrading MySQL

    今天服务器部署node.js+mysql,调用接口报错ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protoc ...

  3. Java入门与进阶P-3.7+P-3.8

    猜数游戏 让计算机来想一个数,然后让用户来猜,用户每输入一个数,就告诉它这是大了还是小了,知道用户猜中为止,最后还要告诉用户它猜了多少次 因为需要不断重复让用户猜,所以需要用到循环 在实际写出程序之前 ...

  4. Unity发布Web之支持手机端

    Unity发布Web之支持手机端 需求: ___ 相信有许多人和小黑一样,会遇到各种各样的难题,这其中就有,Unity发布Web后,在手机浏览器上可运行!!!!! 分析: 为什么会有相关的需求被提出呢 ...

  5. 【分析笔记】Linux 4.9 backlight 子系统分析

    相关信息 内核版本:Linux version 4.9.56 驱动文件:lichee\linux-4.9\drivers\video\backlight\backlight.c 驱动作用 对上,面对应 ...

  6. 在日报、读后感、小说、公文模版、编程等场景体验了一把chatGPT

    总结/朱季谦 在日报.读后感.小说.公文模版.编程等场景体验了一把chatGPT,说下体会. 昨天经过一顿操作猛如虎的捣鼓,终于在Mac笔记本上将chatGPT的访问环境搭建了起来,忍不住立马开始玩起 ...

  7. Linux存储服务

    存储服务 一.概述 存储:用于存放用户上传的内容(数据),一般应用在网站集群中 为什么要存储? 如果不使用存储,用户上传的数据就直接存放在某一台网站服务器上了,用户下次访问就可能找不到 如果使用存储, ...

  8. java画海报

    package demotest; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; impor ...

  9. OPENMP FOR CONSTRUCT GUIDED 调度方式实现原理和源码分析

    OPENMP FOR CONSTRUCT GUIDED 调度方式实现原理和源码分析 前言 在本篇文章当中主要给大家介绍在 OpenMP 当中 guided 调度方式的实现原理.这个调度方式其实和 dy ...

  10. JDK、tomcat、MySQL5.7安装教程

    JDK自定义安装 一.安装JDK.JRE 1.在E盘下建立一个java文件夹,在java文件夹下分别建立jdk和jre文件夹 2.双击安装包 3.点击下一步,更改安装路径,安装到第一步创建好的jdk文 ...