从零开始玩转 Vue.js:用 GitHub 和爬虫构建你的第一个实战项目

徐雨萱
2025-12-23 07:40
阅读 1953

大家好,我是掘金上常写教程的全栈工程师小林。今天这篇教程,源于我当初学前端时的一个困惑:Vue 到底能做什么?学完基础语法后,怎么真正用它做出一个项目?

很多初学者卡在“学会了 v-for、v-if,但不知道下一步该干嘛”的阶段。今天,我们就以一个真实场景——从 GitHub 爬取开源项目数据并展示——带你深度体验 Vue.js 的完整开发生态。

注意:虽然用了“爬虫”一词,但我们不会真的写爬虫代码(浏览器端不能直接爬),而是通过 GitHub API 获取公开数据,这在实际开发中更安全、合规。


一、为什么选择 Vue.js?

Vue 是一套用于构建用户界面的渐进式框架。简单说:

  • 渐进式:你可以只用它做页面局部交互,也可以搭配生态工具构建大型应用。
  • 响应式:数据变了,页面自动更新,不用手动操作 DOM。
  • 生态丰富:Vue Router(路由)、Pinia(状态管理)、Vite(构建工具)等一应俱齐全。

我当初学的时候,就是被它的“温柔上手曲线”吸引——写几行代码就能看到效果,成就感拉满!


二、环境准备:5 分钟搭好开发脚手架

我们使用 Vite + Vue 3 + TypeScript 组合,这是 2024 年最推荐的开发方式。

步骤如下:

  1. 安装 Node.js(>=16.0)

    node -v  # 检查是否安装成功
    
  2. 创建项目

    npm create vue@latest vue-github-explorer
    

    执行后按提示选择:

    • ✔ Add TypeScript? → Yes
    • ✔ Add JSX Support? → No
    • ✔ Add Vue Router? → Yes(我们要做多页面)
    • ✔ Add Pinia? → Yes(状态管理)
    • 其他选 No 即可
  3. 进入项目并启动

    cd vue-github-explorer
    npm install
    npm run dev
    

打开浏览器访问 http://localhost:5173,看到 Vue 的欢迎页就成功了!


三、核心概念速览:理解 Vue 的三大支柱

概念 作用 类比
响应式数据 (ref/reactive) 数据变化自动更新视图 像 Excel 表格,改一个单元格,公式结果自动变
组件化 将 UI 拆分成独立可复用的块 像乐高积木,每个组件是一块积木
组合式 API (setup()) 组织逻辑的新方式(Vue 3 推荐) 像函数式编程,把相关逻辑放在一起

举个最简单的例子:

<script setup>
import { ref } from 'vue'

const count = ref(0)
const increment = () => count.value++
</script>

<template>
  <button @click="increment">点了 {{ count }} 次</button>
</template>

refcount 变成响应式,点按钮时页面自动更新——这就是 Vue 的魔法。


四、实战:做一个 GitHub 仓库探索器

我们要做一个小应用:输入用户名,展示该用户的热门仓库列表。

第一步:设计页面结构

我们有两个页面:

  • 首页 /:输入用户名
  • 仓库页 /repos/:username:展示仓库列表

得益于前面创建项目时选了 Vue Router,路由已自动配置好。

第二步:调用 GitHub API

GitHub 提供免费的 REST API,比如:

GET https://api.github.com/users/vuejs/repos

返回该用户的所有仓库信息(JSON 格式)。

⚠️ 注意:浏览器直接请求会跨域!但 GitHub API 支持 CORS,所以本地开发可以正常调用。

第三步:封装 API 请求(使用 fetch)

新建 src/api/github.ts

// api/github.ts
export const fetchRepos = async (username: string) => {
  const res = await fetch(`https://api.github.com/users/${username}/repos`)
  if (!res.ok) throw new Error('用户不存在或请求失败')
  return res.json()
}

第四步:在组件中使用

修改 src/views/ReposView.vue

<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { useRoute } from 'vue-router'
import { fetchRepos } from '@/api/github'

const route = useRoute()
const username = String(route.params.username)
const repos = ref<any[]>([])
const loading = ref(true)
const error = ref('')

onMounted(async () => {
  try {
    repos.value = await fetchRepos(username)
  } catch (err: any) {
    error.value = err.message
  } finally {
    loading.value = false
  }
})
</script>

<template>
  <div class="repos-page">
    <h2>{{ username }} 的仓库</h2>
    
    <div v-if="loading">加载中...</div>
    <div v-else-if="error" class="error">{{ error }}</div>
    <ul v-else>
      <li v-for="repo in repos" :key="repo.id">
        <a :href="repo.html_url" target="_blank">
          {{ repo.name }}
        </a>
        <p>{{ repo.description || '无描述' }}</p>
        <span>⭐ {{ repo.stargazers_count }}</span>
      </li>
    </ul>
  </div>
</template>

第五步:添加首页表单

HomeView.vue 中添加输入框和跳转逻辑:

<script setup lang="ts">
import { ref } from 'vue'
import { useRouter } from 'vue-router'

const username = ref('')
const router = useRouter()

const handleSubmit = () => {
  if (username.value.trim()) {
    router.push(`/repos/${username.value}`)
  }
}
</script>

<template>
  <div class="home">
    <h1>🔍 GitHub 仓库探索器</h1>
    <form @submit.prevent="handleSubmit">
      <input v-model="username" placeholder="输入 GitHub 用户名" />
      <button type="submit">搜索</button>
    </form>
  </div>
</template>

现在,运行项目,输入 vuejs,就能看到 Vue 官方仓库列表了!


五、新手常见问题解答

Q1:为什么我的 API 请求失败了?

  • 检查用户名是否拼写正确(区分大小写)
  • GitHub 对未认证请求有速率限制(每小时 60 次),刷新太多会报 403。解决办法:登录 GitHub 或稍后再试。

Q2:refreactive 有什么区别?

  • ref 用于基本类型(string, number)或单个对象
  • reactive 用于复杂对象(如 { user: {}, repos: [] }
  • 在模板中,ref 会自动解包,无需 .value

Q3:能不能真的写爬虫?

浏览器端 不能 直接爬取任意网站(出于安全限制)。但你可以:

  • 使用 GitHub API(如本例)
  • 后端写爬虫(Node.js + Puppeteer),前端调用后端接口
  • 使用第三方代理服务(不推荐初学者)

六、学习建议与下一步

你已经完成了第一个 Vue 实战项目!接下来建议:

巩固基础

深入生态

工具 用途 学习优先级
Vue Router 页面跳转 ⭐⭐⭐
Pinia 状态管理 ⭐⭐
Axios HTTP 请求库 ⭐⭐(替代 fetch)
Vite 构建工具 ⭐(了解即可)

避坑指南

  • 不要一开始就学 Vuex(Vue 3 推荐 Pinia)
  • 不要过度追求“最新技术”,先把基础打牢
  • 遇到问题先看控制台报错,90% 的问题都有明确提示

最后提醒:“爬虫”只是数据来源的一种说法,合法合规地使用公开 API 才是正道。GitHub 的开放精神值得我们尊重。

希望这篇教程能帮你迈出 Vue 项目开发的第一步。如果你觉得有用,欢迎在掘金关注我,我会持续更新更多零基础友好教程!

作者:小林,985 全栈工程师,掘金 Top 100 创作者
项目源码已上传 GitHub:github.com/yourname/vue-github-explorer(替换为你的仓库)

评论 0

最热最新
暂无评论
徐雨萱Lv.1
0
影响力
0
文章
0
粉丝