小周末小技巧:通过 GitHub Actions 每日 JavaScript 引语,无需后端。

发布: (2026年3月2日 GMT+8 13:25)
5 分钟阅读
原文: Dev.to

Source: Dev.to

小周末黑客:通过 GitHub Actions 每日获取 JavaScript 名言 —— 无需后端

TL;DR
用 GitHub Actions 每天自动把一条 JavaScript 名言写入仓库(或 Gist),不需要自己搭建服务器。只需要几行 JavaScript 和一个工作流文件。


🎯 目标

  • 每天在仓库根目录生成(或更新)quote-of-the-day.md,内容是一条随机的 JavaScript 名言。
  • 通过 GitHub Actions 自动运行,无需任何自托管服务器。
  • 代码保持极简,便于在周末快速实现。

📂 项目结构

.
├─ .github
│   └─ workflows
│       └─ daily-quote.yml   # GitHub Actions 工作流
├─ quotes.json               # 名言库(JSON 数组)
└─ README.md

1️⃣ 准备名言库

在仓库根目录创建 quotes.json,内容类似:

[
  "JavaScript 是唯一一种可以在浏览器里运行的语言。",
  "在 JavaScript 中,'null' 与 'undefined' 是两个不同的概念。",
  "闭包是 JavaScript 中最强大的特性之一。",
  "不要在全局作用域里污染变量。",
  "使用 '===` 而不是 `==` 来避免隐式类型转换。"
]

提示:可以自行添加更多名言,只要保持 JSON 数组格式即可。


2️⃣ 编写获取随机名言的脚本

在仓库根目录新建 generate-quote.js代码块不翻译):

const fs = require('fs');
const path = require('path');

// 读取 quotes.json
const quotesPath = path.join(__dirname, 'quotes.json');
const quotes = JSON.parse(fs.readFileSync(quotesPath, 'utf8'));

// 随机挑选一条
const randomQuote = quotes[Math.floor(Math.random() * quotes.length)];

// 生成 markdown 内容
const content = `# 今日 JavaScript 名言\n\n> ${randomQuote}\n`;

fs.writeFileSync('quote-of-the-day.md', content);
console.log('✅ quote-of-the-day.md 已生成');

3️⃣ 配置 GitHub Actions 工作流

.github/workflows/daily-quote.yml 中添加以下内容(代码块不翻译):

name: Daily JavaScript Quote

on:
  schedule:
    # 每天 UTC 00:00 运行(相当于北京时间 08:00)
    - cron: '0 0 * * *'
  workflow_dispatch: # 手动触发

jobs:
  generate-quote:
    runs-on: ubuntu-latest

    steps:
      # 1️⃣ 检出仓库代码
      - name: Checkout repository
        uses: actions/checkout@v3

      # 2️⃣ 设置 Node.js 环境
      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '20'

      # 3️⃣ 安装依赖(如果有 package.json)
      - name: Install dependencies
        run: npm ci

      # 4️⃣ 运行生成脚本
      - name: Generate quote
        run: node generate-quote.js

      # 5️⃣ 提交并推送更改
      - name: Commit and push quote
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
          git add quote-of-the-day.md
          git commit -m "📚 Update daily JavaScript quote"
          git push
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

关键点说明

  • schedule:使用 cron 表达式让工作流在每天的固定时间运行。这里使用 UTC 0 点,即北京时间早上 8 点。
  • workflow_dispatch:允许手动触发,便于调试。
  • actions/checkout@v3:把仓库内容检出到 runner。
  • actions/setup-node@v3:安装指定版本的 Node.js。
  • npm ci:如果项目里有 package.json,使用 npm ci 进行快速、可重复的依赖安装。若没有可以省略此步骤。
  • git commit:使用 GitHub 自动提供的 GITHUB_TOKEN 完成提交和推送,无需额外的 PAT(Personal Access Token)。

4️⃣ 验证结果

提交上述文件后,GitHub 会在 Actions 选项卡中显示工作流运行状态。运行成功后,你会在仓库根目录看到 quote-of-the-day.md,内容类似:

# 今日 JavaScript 名言

> 使用 '===` 而不是 `==` 来避免隐式类型转换。

每次工作流触发时,这个文件都会被新的随机名言覆盖。


📦 可选扩展

扩展方向实现思路
发布到 Gist在工作流中使用 actions/create-gist 或直接调用 GitHub API,把生成的 markdown 内容写入个人 Gist。
发送到 Slack / Discord添加一步调用对应的 webhook,把名言推送到团队聊天渠道。
多语言支持quotes.json 中加入不同语言的数组,使用环境变量决定输出语言。
自定义排版使用模板引擎(如 Mustache)生成更丰富的 markdown 或 HTML。

✅ 小结

  • 只用了 3 个文件quotes.jsongenerate-quote.js、工作流 yaml)就实现了每日自动更新的功能。
  • 完全依赖 GitHub Actions,无需自行维护服务器或 cron 任务。
  • 代码简洁、易于扩展,适合作为周末小实验或团队内部的每日灵感推送。

祝你每天都有新的 JavaScript 灵感! 🚀

0 浏览
Back to Blog

相关文章

阅读更多 »

‘skill-check’ JS 测验

问题 1:类型强制转换 以下代码在控制台会输出什么? javascript console.log0 == '0'; console.log0 === '0'; 答案:true,然后 false Ex...