配置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. 2023牛客寒假算法基础集训营1 ACDEFGHKLM

    比赛链接 A 题解 知识点:模拟. 显然. (用char输入到一半直接给答案跳出,WA了两小时,无话可说. 时间复杂度 \(O(1)\) 空间复杂度 \(O(1)\) 代码 #include < ...

  2. 重新思考 Vue 组件的定义

    重新总结组件的定义 这是官方对组件的定义:组件允许我们将 UI 划分为独立的.可重用的部分,并且可以对每个部分进行单独的思考.在实际应用中,组件常常被组织成层层嵌套的树状结构. 对于 Vue 开发经验 ...

  3. Idea导入本地Mavenue项目

    转https://www.cnblogs.com/kaola8023/p/14069519.html 一.导入Maven项目的问题 1. 安装后运行idea会直接打开如下页面 , 我们点击 Open  ...

  4. 【Oculus Interaction SDK】(九)使用控制器时显示手的模型

    前言 这篇文章是[Oculus Interaction SDK]系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言.如果文章的内容已经不适用于新版本了,也可以直接联系我 ...

  5. IDEA新手使用教程【详解】

    IDEA是一款功能强悍.非常好用的Java开发工具,近几年编程开发人员对IDEA情有独钟. Intellij Idea使用技巧总结 1.如何设置通过鼠标滑轮改变编辑器字体大小 2.如何设置自动导包功能 ...

  6. 学习Java Day11

    今天学习了二维数组:

  7. element-ui引入使用

    1.全局引入 main.js import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue. ...

  8. 推荐系统[八]算法实践总结V2:排序学习框架(特征提取标签获取方式)以及京东推荐算法精排技术实战

    0.前言 「排序学习(Learning to Rank,LTR)」,也称「机器排序学习(Machine-learned Ranking,MLR)」 ,就是使用机器学习的技术解决排序问题.自从机器学习的 ...

  9. Postgresql表膨胀率计算

    一.简介 PostgreSQL自带了pgstattuple模块,可用于精确计算表的膨胀率.譬如这里的tuple_percent字段就是元组实际字节占关系总大小的百分比,用1减去该值即为膨胀率. 二.示 ...

  10. LeetCode-1610 可见点的最大数目

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-number-of-visible-points 题目描述 给你一个点数组 poi ...