GrowingIO Design 组件库搭建之 CI/CD

Netlify无服务器函数实战:5分钟搭建一个免费后端API(附完整代码) 本文详细介绍了如何利用Netlify Functions在5分钟内快速搭建免费的后端API。通过实战演示,从环境准备、编写处理GET/POST请求的函数,到本地调试和自动化部署,帮助前端开发者和全栈初学者轻松实现无服务器后端部署,为个人项目或原型添加动态功能。 阅读详情

前言

在《GrowingIO SaaS 产品 CI/CD 实践》一文中,介绍了持续集成(Continuous Intergration,简称 CI)、持续交付(Continuous Delivery,简称 CD)和持续部署(Continuous Deployment,简称 CD)三个概念,以及在 GrowingIO SaaS 产品中的实践。 文中还强调一个典型的 CI/CD 流程建设至少需要具备以下功能的工具:

  • 代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库

  • 持续集成服务器,用于自动执行构建,测试,部署等任务

  • 集中的制品管理仓库,用于存放构建的成果物,用于部署

  • 自动部署工具,用于将构建到的程序自动的部署到目标服务器

对于 GrowingIO Design,使用的工具是:

  • 代码存储库:GitHub

  • 持续集成服务器:GitHub Actions

  • 集中的制品管理仓库:npm

  • 自动部署工具:Vercel

持续集成

代码检查(Lint codes)

在《GrowingIO Design 组件库搭建之开发工具》一文中,介绍了组件库使用 stylelint 和 ESLint 作为代码规范工具。

为了方便使用,在 package.json 文件中增加一下两个脚本(后文简称脚本化):

{
  "scripts": {
    "eslint": "eslint src --ext .ts,.tsx",
    "stylelint": "stylelint 'src/**/*.{css,less}' --syntax less",
  },
}

然后用 GitHub Actions 来执行这两个命令:

jobs:
  lint:
    name: Lint codes
    needs: install
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - name: Setup Node.js
        uses: actions/setup-node@v2.4.1
        with:
          node-version: 14
      - name: Restore Node.js modules
        uses: actions/cache@v2.1.6
        with:
          path: node_modules
          key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }}
      - name: StyleLint
        run: yarn stylelint
      - name: ESLint
        run: yarn eslint

单元测试(Unit test)

《GrowingIO Design 组件库搭建之单元测试》中提到单元测试工具主要使用 Jest,在 CI 流程中除了保证单元测试通过,还要统计测试覆盖情况(通过 --coverage 参数来实现)。 命令脚本化:

{
  "scripts": {
    "test": "jest",
  },
}

GitHub Actions 中的 job:

 jobs:
  unit_test:
    name: Unit test
    needs: install
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - name: Setup Node.js
        uses: actions/setup-node@v2.4.1
        with:
          node-version: 14
      - name: Restore Node.js modules
        uses: actions/cache@v2.1.6
        with:
          path: node_modules
          key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }}
      - name: Cache test report
        id: cache-test-report
        uses: actions/cache@v2.1.6
        with:
          path: coverage/lcov.info
          key: test-report-${{ github.event.pull_request.head.sha }}
      - name: Test
        if: steps.cache-test-report.outputs.cache-hit != 'true'
        run: yarn test --coverage

打包(Build package)

组件库打包使用 father-build 工具,主要看重它的三个特性:

  • 基于 rollup 和 babel 的组件打包功能

  • 支持 TypeScript

  • 支持 cjs、esm 和 umd 三种格式的打包

三种格式打包对应的目录为:

打包格式

存放目录

cjs

lib

esm

es

umd

dist

打包命令脚本化:

{
  "scripts": {
    "build": "father-build",
  },
}

GitHub Actions 中的 job:

jobs:
  build:
    name: Build package
    needs: install
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - name: Setup Node.js
        uses: actions/setup-node@v2.4.1
        with:
          node-version: 14
      - name: Restore Node.js modules
        uses: actions/cache@v2.1.6
        with:
          path: node_modules
          key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }}
      - name: Cache package
        id: cache-package
        uses: actions/cache@v2.1.6
        with:
          path: |
            dist
            es
            lib
          key: package-${{ github.event.pull_request.head.sha }}
      - name: Build
        if: steps.cache-package.outputs.cache-hit != 'true'
        run: yarn build

代码质量(Sonar scan)

使用 Sonar 来检测代码质量,并且用来展示单元测试报告。 GitHub Actions 中的 job:

jobs:
  sonar:
    name: Sonar scan
    needs: unit_test
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
          ref: ${{ github.event.pull_request.head.sha }}
      - name: Restore test report
        uses: actions/cache@v2.1.6
        with:
          path: coverage/lcov.info
          key: test-report-${{ github.event.pull_request.head.sha }}
      - name: Upload reports to SonarCloud
        uses: sonarsource/sonarcloud-github-action@master
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

这个 job 会把代码扫描结果和覆盖测试报告上传到 sonar cloud,并把结果反馈在 PR 上:

持续交付

有了持续集成流程后,持续交付流程就比较简单了。因为对于 GrowingIO Design 来说,交付产物是 npm 包,对应的命令就是:

$ yarn build
$ yarn publish

GitHub Actions 的 job:

jobs:
  publish-package:
    if: ${{ startsWith(github.event.head_commit.message, 'docs(release)') }}
    name: Publish package
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup Node.js
        uses: actions/setup-node@v2.4.1
        with:
          node-version: 14
          registry-url: 'https://registry.npmjs.org'
      - name: Cache Node.js modules
        id: cache-node-modules
        uses: actions/cache@v2.1.6
        with:
          path: node_modules
          key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }}
      - name: Install
        if: steps.cache-node-modules.outputs.cache-hit != 'true'
        run: yarn install
      - name: Build
        run: yarn build
      - name: Publish package
        run: yarn publish --non-interactive --access public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
      - name: Get package version
        id: get-package-version
        run: echo "::set-output name=version::$(yarn -s get-version)"
      - name: Publish GitHub release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: v${{ steps.get-package-version.outputs.version }}
          release_name: v${{ steps.get-package-version.outputs.version }}
          body_path: VERSION.md
          draft: false
          prerelease: false

额外说一下,在发布包之后,我们还想把当前版本的 changelog 发布到 GitHub 的 release 中,我们约定先提交一个用于发版的 Pull Request,例如:

当这个 Pull Request 被合并后,就会触发持续交付流程,这也是有以下判断条件的原因: if: ${{ startsWith(github.event.head_commit.message, 'docs(release)') }} 当 job 执行完后,会在 GitHub 上创建对应的 release:

其他流程

依赖包更新

这里使用 GitHub Dependabot 自动维护仓库的依赖项。Dependabot 确定依赖项是否有新版本,它通过查看依赖的语义版本 (semver) 来决定是否应更新该版本。当 Dependabot 发现过时的依赖项时,它会发起 Pull Request 以将清单更新到依赖项的最新版本。检查测试是否通过,查看 Pull Request 摘要中包含的更改日志和发行说明,然后合并它。

dependabot 的配置:

version: 2
updates:
  - package-ecosystem: 'npm'
    directory: '/'
    schedule:
      interval: 'weekly'
    ignore:
      - dependency-name: '*'
        update-types: ['version-update:semver-patch']
      - dependency-name: '@storybook/*'

  - package-ecosystem: 'github-actions'
    directory: '/'
    schedule:
      interval: 'monthly'

部署预览网站

在《GrowingIO Design 组件库搭建之组件开发》文章中提到组件文档使用 Storybook 来生成网站,为了实现每个 Pull Request 能单独部署生成预览网站,调研了一些产品,最终筛选出三个 Netlify、Vercel 和 Surge,以下是这个三个产品的特性对比:

Netlify

Surge

Vercel(个人版)

Vercel(组织版)

收费标准

免费

免费

免费

按账号收费

部署限制

300 分钟/月

部署次数不限制

无限制

无限制

自定义域名

支持

支持

支持

支持

HTTPS

支持

对于自定义域名收费

支持

支持

自动部署

支持

手动部署

支持

支持

对于 Netlify,每个 Pull Request 提交频率会比较频繁,300 分钟的额度会很快被用完,所以 Netlify 也不适合在此使用。

对于 Surge,一开始想通过 GitHub Actions 把网站部署到 Surge,但是遇到一个问题,Surge 网站的 token 只能存放在仓库的 secrets 中,GitHub 禁止从 fork 仓库提交的 Pull Request 访问 secrets,GitHub 上的原话是:

Secrets are not passed to workflows that are triggered by a pull request from a fork.

我们只能另辟蹊径,使用 Azure DevOps,它是通过环境变量来存储 token,但是不会像 GitHub 对 fork 仓库的 Pull Request 有限制。参考 Netlify 的实现,把部署的 URL 通过评论的形式添加到 Pull Request 上。 对于 Vercel,对 GitHub 上的组织账号是收费,但是对于开源项目可以申请 Open Source 的 License,我们用 GrowingIO Design 申请了 License 后,最终使用 Vercel 来托管预览网站。

总结

通过 CI/CD 流程把组件库搭建的前序工作都串联起来了,基础设施已搭建完成,接下来主要工作就是丰富组件了。

GrowingIO Design 组件库搭建系列文章只是告一段落,但并不是结束。接下来还会一些复杂组件实现的文章,或者相关工具库的实现。随着时间推移和技术迭代,未来甚至可能会推到现有基础设施,重新构建。敬请期待!

参考文献

  1. GrowingIO SaaS 产品 CI/CD 实践 (一):https://mp.weixin.qq.com/s/4FGtVwpsJqyeOoMGjEfnuA

  2. GrowingIO Design 组件库搭建之开发工具:https://mp.weixin.qq.com/s/rdgj9ZI-gGfDWj-bCNtHng

  3. GrowingIO Design 组件库搭建之单元测:https://mp.weixin.qq.com/s/BPLgYsZ9B94P0vuH65N0Mw

  4. GrowingIO Design 组件库搭建之组件开发:https://mp.weixin.qq.com/s/Eyik5KsiPzSv4n9DG3RGOA

  5. GitHub Actions:https://docs.github.com/en/actions

  6. Depandabot:https://docs.github.com/cn/github/administering-a-repository/keeping-your-dependencies-updated-automatically

  7. 语义版本:https://semver.org/

 

【硬件】通俗易懂的讲解晶体管(三极管和MOS管)的工作原理 晶体管是一个简单的元器件,可用于构建许多有趣的项目。在本文中,我将用通俗易懂的语言给您讲解晶体管的工作原理,以便您可以在电路设计中更好的使用静态管。一旦你学习这些基础知识,对以后的设计和使用来说,将会变得非常容易。我们将重点介绍两种最常见的晶体管:双极型晶体管(三极管)和MOSFET。晶体管的工作原理其实是类似于电子开关。它可以打开和关闭电路。一个简单的思考方法是将晶体管视为无源的继电器。晶体管类似于继电器,从某种意义上说,您可以使用它来打开和关闭某些东西。但晶体管也可以部分导通,一般在放大电路中使用,这部 阅读详情

相关推荐

【SLAM论文笔记】SplaTAM论文小结

参考方法有ORB-SLAM3、Point-SLAM、NICE-SLAM、Kintinuous、ElasticFusion,测试数据集有ScanNet++、Replica、TUM-RGBD、Orig-ScanNet,SpaTAM并未在全部对比均为第一,表现最佳的是在ScanNet++、Replica,ScanNet++上SplaTAM方法位姿精度比第2名ORB-SLAM3高两个数量级,在TUM。上无稀疏SLAM结果,NICE-SLAM与Point-SLAM占优。SplaTAM基本做到了SOTA。

持之以恒 1011

Web基础研发体系:一线工程师的效能操作系统

Web基础研发体系是支撑现代前端工程化落地的核心基础设施,其本质并非技术栈堆砌,而是围绕数据可控性与逻辑可分析性构建的统一运行时底座。它通过State Tree实现状态可序列化、可回放、可协同,借助声明式数据流(如Saga管道)解耦业务逻辑与副作用,将设计稿转代码、无埋点监控、权限集成等能力标准化为可插拔工具链。该体系显著降低跨角色协作摩擦,提升需求交付效率与线上稳定性,适用于中大型Web团队从资源池向能力中心演进的全过程。本文聚焦其操作系统级设计思想与关键落地实践。

381

STM32CubeIDE入坑指南

一 前言 在科技日新月异的今天,作为从事效率为先的苦逼 IT 行业,秉承着我不入地狱谁入地狱的伟大革命精神,我决定再一次做第一个吃螃蟹的人,通过自身的入坑过程,为大家测试STM32CubeIDE这款新式工具。(其实是为了我能省点时间,快点做完项目,多挣点钱买几瓶肾气丸) 二 看一看别人是如何入坑的 二 手把手带你入坑 三 相关资料 ...

CH的博客 1万+

Gemma4与阿里编程模型:开源基座与垂直垂类的双轨演进

大语言模型正从通用能力竞赛转向基座-垂类协同演进的新阶段。开源基座模型如Gemma4通过动态稀疏注意力、分段式RoPE和跨模态token对齐,在32B参数量级实现高性价比推理;而垂直领域模型(如阿里DevFlow)则以AST驱动生成、Git历史建模和工作流原生设计,显著提升代码生成在真实开发场景中的可用性与合规性。这种‘强基座+深垂类’范式,不仅重构了模型评估标准(从基准刷分到工作流嵌入),更直接支撑企业级AI编程助手的私有化落地、CI/CD集成与金融级安全审计。本文聚焦Gemma4架构创新与阿里编程模型的

weixin_34072637的博客 454

晶圆测试厂wafer map管理建议

按照Recipe设定bin定义 应有版本管理概念,一般使用最新版本做为活动版本即可 Bin明细中应包含 BinID、BinCode、BinName、BinType、BinColor、Description BinID可使用数字类型 BinCode可参照实际机台的Bin,用于匹配 有些公司也将BinID、BinCode理解为SBin和HBin 即 Software Bin & Hardware Bin 一般也将BinID对应到客户的Bin BinType

凯神做开发 1万+

Hive数据仓库分层架构实战:4层黄金模型×6大业务场景×万亿级数据优化方案

根据《2023数据中台成熟度报告》,‌78%的ETL任务性能瓶颈‌源于分层设计不合理。本文基于某头部电商平台PB级数据仓库建设经验,结合金融风控、用户画像、实时大屏等核心场景,深度解析‌ODS→DWD→DWS→ADS‌四层架构设计原则,揭秘‌万亿级数据治理方案‌与‌维度建模20大避坑策略‌。

优快云博客专家,领域包括但不限于:AI、大数据、Python、架构师,有合作、课程、问题、疑惑请私信博主 1484

GrowingIO Design 组件库搭建之开发工具

前言 在 20 世纪 60 年代,计算机技术开始超过软件编程的速度。计算机变得更快、更便宜,但是软件开发仍然缓慢,难以维护,并且容易出错。这种差距,以及如何应对,被称为“软件危机”。1968 年,在北约软件工程会议上,Douglas McIlroy 提出了基于组件的开发作为解决这一困境的可能方法。基于组件的开发提供了一种通过使代码可重用来加快编程潜力的方法,从而使其更高效且更易于扩展。这降低了工作量,提高了软件开发的速度,使软件能够更好地利用现代计算机的力量。 现在,50 年后,我们正经历着类似的挑战,但.

GrowingIO 基于 BitMap 的海量数据分析 601

新版MQL语言程序设计:用vscode编写编译调试mt4和mt5程序

使用VScode搭建MT4与MT5开发环境,实现编辑编译调试统一。

超哥量化的博客 6872

探索Gant Design:优雅的React组件库与项目框架

探索Gant Design:优雅的React组件库与项目框架 是一个基于React的开源UI组件库,它旨在为开发人员提供一套完整、易用且美观的前端解决方案。项目由蚂蚁金服团队维护,以丰富的组件和高度定制性赢得了开发者们的青睐。本文将深入探讨其技术特性和应用场景,帮助你更好地理解并利用Gant Design优化你的项目。 技术解析 1. 基于React Gant Design完全构建在React之上...

gitblog_00066的博客 394

YOLOv12改进策略【Neck】| 使用CARAFE轻量级通用上采样算子

CARAFE内容感知的特征重新组合。

Limiiiing的博客 664

【即插即用模块】Transformer篇 | MICCAI 2025 | ReLULA:Q/K双ReLU线性注意力,既轻又准!

本文介绍了一种基于线性注意力的多实例学习模块(Lin-MIL),适用于高分辨率视觉任务。该模块通过转置计算顺序和使用ReLU激活,将计算复杂度从O(n²d)降至O(nd²),同时提升特征判别性。核心创新包括Q/K双ReLU激活、可学习温度系数和数值稳定归一化。实验表明,该模块在轻量化视觉任务中优于传统线性注意力和Mamba架构。代码实现了模块化矩阵乘法,支持即插即用替换ViT自注意力层。该模块特别适合计算病理学等需要处理大量图像补丁的任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 140

9个大厂的UI组件库,以后前端攒页面不愁啦!

组件库是可以重复使用的界面设计元素的集合体,有时候需要快速搭建产品,从UI设计开始来不及,前端就得先跑起来,贝格前端工场为大家精选了9个大厂的UI组件库,都是免费的。

2401_82616673的博客 8201

【以太网硬件九】1000base-X是什么?

简要描述1000base-X物理层规范

highman110的博客 1万+

前端人必知的七大UI组件库!

今天给大家分享一下前端人必知的,这些组件库相信有不少的小伙伴正在使用。每个组件库的来源背景和风格功能都不尽相同,值得大家尝试一波。

半截短袖的博客 2551

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Google Material Design 元件库

“Material Design 是我们将经典的设计原则和科技、创新相结合而创造的设计语言。 ——Google ” MaterialDesign目标 1、创造一个将经典的设计原则和科技、创新相结合的设计语言。 2、开发一个能在不同平台、不同设备上提供一致的体验的底层系统。遵循基本的移动设计定则,并同时支持触摸、语音、鼠标、键盘等输入方式。 点击这里 查看在线演示,赞赏后获取源文件。 GMDL是参考官方 Material Design 规范,设计的一套元件库,并针对实际应...

yotoodesign的博客 1331

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

growingio基本使用(总结)

  growingio基本使用 背景:方便分析图片报告的哪些报告受到用户喜欢,来调整报告的侧重点  设计师引流网站:http://huaban.com/  (国内,花瓣)                                  http://www.pinterest.com/ (国外) 一,准备工作: 注册一个GrowingIO账号 拥有自己的网站或APP 1,选择...

gaokcl的博客 3万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

GrowingIO Design 组件库搭建之Select组件

前言 Select 是最频繁使用的UI组件之一,它可以运用在很多场景。大多数情况下,原生HTML的<Select>标签无法满足业务的功能过需求,以及原生HTML的<Select>标签在各个浏览器版本里样式表现不太一样。在这样的情况下,多数人都会选择实现一个符合UI要求以及产品功能需求的Select组件,或者选择使用一些开源组件库提供的 Select 组件。本文主要梳理了 gio-design 中的Select组件在实现过程中遇到的一些阻碍及需要注意的地方,希望能对大家在设计和实现s

GrowingIO 基于 BitMap 的海量数据分析 695

重磅!哈啰 Quark Design 正式开源,下一代跨技术栈前端组件库

大家好,我是若川。我持续组织了近一年的源码共读活动,感兴趣的可以点此扫码加我微信ruochuan12参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》包含20余篇源码文章。历史面试系列。另外:目前建有江西|湖南|湖北籍前端群,可加我微信进群。1Quark Design 是什么?Quark(夸克) Design 是由哈啰平台 UED 和增长&a...

u012384510的博客 2066

【零基础用Netlify部署网站!免费托管+自动SSL+Serverless,一条龙搞定!】

这篇万字长文会从注册账号到部署React项目,再到隐藏的“作弊技巧”(比如自动压缩图片、防止爬虫攻击),手把手教你玩转Netlify!你可能听说过Netlify,它被开发者称为“静态网站托管的天花板”!Netlify就是个“智能网站托管机器人”——你把代码扔给它,它自动帮你搞定压缩、加速、安全防护,甚至还能帮你收邮件!大家好,我是小明,一个用Netlify白嫖了50多个网站的重度用户。部署完成后,Netlify会显示你的专属域名。:Netlify会自动检测项目类型(React、Vue等)并配置构建命令!

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1万+

第三方免费部署平台深度解析

GitHub Pages是GitHub提供的静态网站托管服务,与GitHub仓库深度集成,是开源项目和个人博客的首选平台。Netlify是专注于现代web开发的部署平台,以其出色的开发者体验和丰富的功能特性而闻名。Vercel是Next.js团队打造的部署平台,专为现代前端框架优化,提供极致的性能和开发体验。},Railway是新兴的全栈部署平台,支持从静态网站到复杂微服务的各种应用类型。Render致力于简化云基础设施,提供从静态网站到容器化应用的全方位部署服务。

像风一样自由的博客 2310

netlify信用额度急剧消耗,300免费信用分到底谁占用了?

Netlify信用分消耗问题:静态网站托管并非完全免费。用户发现频繁更新Publii生成的静态网页会快速消耗每月300分的信用额度,每次生产部署需15分,仅更新就消耗了225分。加上网站访问请求的消耗,每月更新次数被限制在19次以内。结论:Netlify适合低频大更新的网站,不适合需要高频更新的场景。

部落小酋长日记 531

用户数据分析工具 GrowingIO

1.通过cocoapods 导入 添加 pod 'GrowingIO' 到 Podfile 中。 2.登录创建应用,获取id。 3.在 AppDelegate 中引入#import "Growing.h" 4. [Growing startWithAccountId:@"您的项目ID"]; 5. 开启Growing调试日志 可以开启日志 // [Growing setEn...

weixin_30414245的博客 252

GrowingIO iOS Autotracker 使用教程

GrowingIO iOS Autotracker 使用教程 1. 项目介绍 GrowingIO Autotracker 是一个用于 iOS 平台的自动用户行为事件采集 SDK。它能够自动采集基本的用户行为事件,如访问和行为数据,并支持代码埋点、无埋点、可视化圈选、热图等功能。该 SDK 旨在帮助开发者更高效地收集和分析用户行为数据,从而优化产品设计和提升用户体验。 2. 项目快速启动 2.1 安...

gitblog_00060的博客 1205

Netlify Functions免费额度测评:Cloud-Free-Tier-Comparison无服务器后端实现

你是否还在为选择无服务器后端服务而纠结?是否担心免费额度不够用或隐藏收费陷阱?本文将通过Cloud-Free-Tier-Comparison项目数据,为你深度测评Netlify Functions的免费额度,并演示如何基于该项目实现无服务器后端架构,帮你零成本搭建可靠的后端服务。读完本文,你将清晰了解Netlify Functions的免费资源边界、适用场景及与其他云厂商的对比优势。 ## Ne...

gitblog_00113的博客 719

玩转AI项目部署:盘点5大免费平台,不可不知的 Vercel 至 Railway

原创 Aitrainee | 公众号:AI进修生:AI算法工程师 / Prompt工程师 / ROS机器人开发者 | 分享AI动态与算法应用资讯,提升技术效率。🌟 有几个流行的和今天归纳说一说吧,我有时候就是喜欢把一些东西整理在一起,这样方便用的时候随时经常玩项目、以及现在各种火热的下面经常会出现这几个平台的身影:这里面包括r。文章会涉及每个平台的优缺点、特色功能、提供相关的示例项目和部署链接,可以配合实践。

lythinking的博客 7371

利用 Netlify Functions 构建随机图片 API

众所周知,本网站导航栏中有一「」栏目。该栏目中的三个页面,都是旧网站中没有的,是我在新网站创立之初灵机一动想到的。为了更明显地区分它们与主站,我特意选择了,这在「」中有提到。但是,我在寻找“二次元风景壁纸 API”时发现这些 API 大部分都难以令我满意,费尽周折才选出这一个,但是图库比较小。恰好我手里有一些图片,于是就萌生了的想法。项目可以部署在 netlify functions 上。这款服务是免费提供的——至少是够用的。

oBSizu 的博客 686
上一篇: Flutter 无埋点SDK实现
下一篇: GrowingIO 数据安全实践
GrowingIO_
博客等级 码龄8年 56粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值