Community程式設計與開發github.com

套件:網頁框架

使用 Next.js (App Router, RSC, SSR, ISR) 與 Turborepo 單體倉庫進行開發。適用於 React 應用程式、伺服器端渲染、建置最佳化、快取策略與共享相依性。

套件:網頁框架 是什麼?

此技能組合提供使用 Next.js、Turborepo 和 RemixIcon 構建現代全端 Web 應用程式的全面指南。它涵蓋了獨立應用程式和基於單體倉庫的設置,詳細說明了何時以及如何使用每個工具。主要功能包括 Next.js 的伺服器端渲染 (SSR) 與靜態網站生成 (SSG)、Turborepo 的高效能快取與平行任務執行,以及 RemixIcon 超過 3100 個圖示的豐富圖示庫。此技能支援多種平台與工作流程,特別適用於需要在多個專案或微前端間共享程式碼的開發環境。它還提供了常見模式的逐步指引,包括共享元件庫的設置、最佳化資料獲取以及持續整合與持續部署 (CI/CD) 管線的配置,協助開發人員快速建置生產就緒的應用程式。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/darrenak403/kit-skills/tree/HEAD/skills/kit-web-frameworks

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

網頁框架技能組合

使用 Next.js、Turborepo 和 RemixIcon 構建現代全端 Web 應用程式的全面指南。

概覽

此技能組合整合了三種強大的網頁開發工具:

Next.js - 具備 SSR、SSG、RSC 與最佳化功能的 React 框架 Turborepo - 高效能的 JavaScript/TypeScript 單體倉庫建置系統 RemixIcon - 擁有 3,100+ 個輪廓與填充風格圖示的圖示庫

使用時機

  • 使用現代 React 構建新的全端 Web 應用程式
  • 設置包含多個應用程式與共享套件的單體倉庫
  • 實作伺服器端渲染與靜態生成
  • 透過智慧型快取最佳化建置效能
  • 使用專業圖示建立一致的使用者介面
  • 跨多個專案管理工作區相依性
  • 部署經過適當最佳化的正式環境應用程式

堆疊選擇指南

單一應用程式:Next.js + RemixIcon

在建置獨立應用程式時使用:

  • 電子商務網站
  • 行銷網站
  • SaaS 應用程式
  • 文件網站
  • 部落格與內容平台

設置:

npx create-next-app@latest my-app
cd my-app
npm install remixicon

單體倉庫:Next.js + Turborepo + RemixIcon

在建置包含共享程式碼的多個應用程式時使用:

  • 微前端
  • 多租戶平台
  • 搭配共享元件庫的內部工具
  • 共享邏輯的多個應用程式(網頁、管理後台、行動網頁)
  • 包含文件網站的設計系統

設置:

npx create-turbo@latest my-monorepo
# 然後在 apps/ 目錄中配置 Next.js 應用程式
# 在共享 UI 套件中安裝 remixicon

框架功能比較

功能Next.jsTurborepoRemixIcon
主要用途Web 框架建置系統UI 圖示
最佳用途SSR/SSG 應用程式單體倉庫一致的圖示風格
效能內建最佳化快取與平行任務輕量級字型/SVG
TypeScript完整支援完整支援提供型別定義

快速入門

Next.js 應用程式

# 建立新專案
npx create-next-app@latest my-app
cd my-app

# 安裝 RemixIcon
npm install remixicon

# 在佈局中匯入
# app/layout.tsx
import 'remixicon/fonts/remixicon.css'

# 啟動開發伺服器
npm run dev

Turborepo 單體倉庫

# 建立單體倉庫
npx create-turbo@latest my-monorepo
cd my-monorepo

# 結構:
# apps/web/          - Next.js 應用程式
# apps/docs/         - 文件網站
# packages/ui/       - 使用 RemixIcon 的共享元件
# packages/config/   - 共享配置
# turbo.json         - 管線配置

# 執行所有應用程式
npm run dev

# 建置所有套件
npm run build

RemixIcon 整合

// Webfont (HTML/CSS)
<i className="ri-home-line"></i>
<i className="ri-search-fill ri-2x"></i>

// React 元件
import { RiHomeLine, RiSearchFill } from "@remixicon/react"
<RiHomeLine size={24} />
<RiSearchFill size={32} color="blue" />

參考導航

Next.js 參考資料:

Turborepo 參考資料:

RemixIcon 參考資料:

常見模式與工作流程

模式 1:全端單體倉庫

my-monorepo/
├── apps/
│   ├── web/              # 面向客戶的 Next.js 應用程式
│   ├── admin/            # 管理後台 Next.js 應用程式
│   └── docs/             # 文件網站
├── packages/
│   ├── ui/               # 使用 RemixIcon 的共享 UI
│   ├── api-client/       # API 客戶端函式庫
│   ├── config/           # ESLint、TypeScript 配置
│   └── types/            # 共享 TypeScript 型別
└── turbo.json            # 建置管線

turbo.json:

{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": [".next/**", "!.next/cache/**", "dist/**"]
    },
    "dev": {
      "cache": false,
      "persistent": true
    },
    "lint": {},
    "test": {
      "dependsOn": ["build"]
    }
  }
}

模式 2:共享元件庫

// packages/ui/src/button.tsx
import { RiLoader4Line } from "@remixicon/react";

export function Button({ children, loading, icon }) {
  return (
    <button>
      {loading ? <RiLoader4Line className="animate-spin" /> : icon}
      {children}
    </button>
  );
}

// apps/web/app/page.tsx
import { Button } from "@repo/ui/button";
import { RiHomeLine } from "@remixicon/react";

export default function Page() {
  return <Button icon={<RiHomeLine />}>Home</Button>;
}

模式 3:最佳化資料獲取

// app/posts/[slug]/page.tsx
import { notFound } from "next/navigation";

// 在建置時進行靜態生成
export async function generateStaticParams() {
  const posts = await getPosts();
  return posts.map((post) => ({ slug: post.slug }));
}

// 每小時重新驗證
async function getPost(slug: string) {
  const res = await fetch(`https://api.example.com/posts/${slug}`, {
    next: { revalidate: 3600 },
  });
  if (!res.ok) return null;
  return res.json();
}

export default async function Post({ params }: { params: { slug: string } }) {
  const post = await getPost(params.slug);
  if (!post) notFound();

  return <article>{post.content}</article>;
}

模式 4:單體倉庫 CI/CD 管線

# .github/workflows/ci.yml
name: CI
on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 18
      - run: npm install
      - run: npx turbo run build test lint
        env:
          TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
          TURBO_TEAM: ${{ secrets.TURBO_TEAM }}

實用腳本

位於 scripts/ 目錄中的 Python 工具:

nextjs_init.py - 以最佳實踐初始化 Next.js 專案 turborepo_migrate.py - 將現有單體倉庫轉換為 Turborepo

使用範例:

# 使用 TypeScript 與建議設置初始化新的 Next.js 應用程式
python scripts/nextjs_init.py --name my-app --typescript --app-router

# 以試運行模式將現有單體倉庫遷移至 Turborepo
python scripts/turborepo_migrate.py --path ./my-monorepo --dry-run

# 執行測試
cd scripts/tests
pytest

最佳實踐

Next.js:

  • 預設使用伺服器元件,僅在必要時使用客戶端元件
  • 實作適當的載入與錯誤狀態
  • 使用 Image 元件進行自動最佳化
  • 設定適當的中繼資料以利 SEO
  • 善用快取策略(force-cache、revalidate、no-store)
  • 將穩定的 Next.js 安全性更新與 canary 版的框架漂移分開追蹤。正式環境應用程式應保持在修補過的穩定發行版上,除非測試特定的上游問題,否則避免僅使用 canary 版固定。

Turborepo:

  • 使用清晰的劃分結構(apps/、packages/)組織單體倉庫
  • 正確定義任務相依性(使用 ^build 進行拓撲排序)
  • 配置輸出以實現正確的快取
  • 啟用遠端快取以利團隊協作
  • 使用過濾器僅對變更的套件執行任務

RemixIcon:

  • 極簡介面使用輪廓樣式,強調時使用填充樣式
  • 維持 24x24 的網格對齊以獲得清晰渲染
  • 提供 aria-labels 以確保無障礙性
  • 使用 currentColor 實現靈活的主題化
  • 多個圖示時偏好使用 webfonts,單一圖示時使用 SVG

資源

實作檢查清單

使用此堆疊建置時:

  • 建立專案結構(單一應用程式或單體倉庫)
  • 配置 TypeScript 與 ESLint
  • 使用 App Router 設置 Next.js
  • 配置 Turborepo 管線(如果是單體倉庫)
  • 安裝並配置 RemixIcon
  • 實作路由與佈局
  • 加入載入與錯誤狀態
  • 配置圖片與字型最佳化
  • 設置資料獲取模式
  • 配置快取策略
  • 根據需要加入 API 路由
  • 實作共享元件庫(如果是單體倉庫)
  • 配置遠端快取(如果是單體倉庫)
  • 設置 CI/CD 管線
  • 配置部署平台

相關技能