+1

7 Script Bash mà mọi lập trình viên Frontend nên có bộ công cụ của mình

The Pragmatic Programmer là một trong những cuốn sách lập trình hay nhất mà tôi từng đọc. Tôi yêu thích nó vì không chỉ nói về việc viết mã, mà còn về việc trở thành một lập trình viên giỏi hơn. Cuốn sách là một viên ngọc quý, nếu bạn chưa đọc thì tôi cực kỳ khuyên bạn nên đọc thử.

Một trong vô số bài học tôi rút ra được là ý tưởng về việc có một “hộp công cụ” cá nhân chứa các script và tiện ích giúp bạn làm việc dễ dàng hơn.

Vì vậy, tôi nghĩ sẽ thật tuyệt nếu chia sẻ một danh sách nhỏ các script mà bất kỳ ai cũng có thể tận dụng. Dù bạn đang xây dựng giao diện người dùng, tạo API giả, hay chỉ đơn giản là dọn dẹp thư mục node_modules đã cũ kỹ.

Lưu ý: Những script dưới đây được viết cho dự án Next.js sử dụng yarn. Tuy nhiên, rất dễ để tùy biến cho phù hợp với dự án của bạn.

1. flush.sh: Xóa node_modules và Cài đặt lại

Tôi thường xuyên phải cập nhật dependency và phải xóa node_modules, .next, dist bằng tay. Script này giúp tôi làm điều đó nhanh gọn:

#!/bin/bash
echo "🧼 Burning it all down and starting fresh..."
# Remove any build artifacts, this one is for a Next.js build
rm -rf node_modules .next dist
# Remove the lock files too if you want to get spicy
rm -f yarn.lock package-lock.json
yarn install

Dùng khi dependency bị lỗi, build local bị hỏng, hoặc đơn giản là đã lâu chưa cập nhật gì cả.

2. generate-users.sh: Tạo dữ liệu JSON người dùng giả

Tuyệt vời khi cần dữ liệu mẫu để test. Script này sẽ tạo ra một file JSON chứa danh sách người dùng giả.

#!/bin/bash

COUNT=${1:-10}
echo "Generating $COUNT dummy users..."

cat > mock-users.json <<EOL
[
EOL

for ((i=1; i<=COUNT; i++)); do
  echo "  {" >> mock-users.json
  echo "    \"id\": \"$i\"," >> mock-users.json
  echo "    \"name\": \"User $i\"," >> mock-users.json
  echo "    \"email\": \"user$i@example.com\"" >> mock-users.json
  if [ "$i" -lt "$COUNT" ]; then
    echo "  }," >> mock-users.json
  else
    echo "  }" >> mock-users.json
  fi
done

echo "]" >> mock-users.json
echo "mock-users.json created!"

Phản hồi API giả lập. Điền vào chế độ xem danh sách. Điền vào thiết kế trạng thái trống. Tất cả chỉ trong vài giây.

3. mock-api-server.sh: Khởi chạy API REST giả

Đi cùng với script tạo người dùng bên trên. Script này giúp bạn dựng một API giả nhanh chóng để frontend có thể gọi đến.

#!/bin/bash
echo "Starting local mock API..."
npx json-server --watch mock-users.json --port 4000

Trỏ frontend đến http://localhost:4000/users và cứ thế tiếp tục phát triển ứng dụng.

4. lint-fix.sh: Dọn dẹp mã trước khi Commit

Trước đây tôi hay push rồi mới bị CI báo lỗi lint. Giờ tôi chạy script này trước:

#!/bin/bash
echo "Linting..."
yarn lint --fix

echo "Formatting with Prettier..."
yarn format

Bạn có thể thêm vào pre-commit hooks hoặc đơn giản là chạy nó khi thấy áy náy về style code của mình.

5. dev-ready.sh: Kiểm tra TypeScript, Lint, và chạy Dev

Tương tự như script trên, nhưng có thêm bước kiểm tra TypeScript trước khi chạy server:

#!/bin/bash
echo "Running lint check..."
yarn lint

echo "Checking types..."
yarn tsc --noEmit

echo "Starting dev server..."
yarn dev

Giống như khởi động nhẹ cho repo của bạn, giúp mọi thứ ổn định trước khi bắt tay vào code.

6. copy-template.sh: Nhân bản thư mục Component

Đừng để Rails có hết niềm vui! Bạn cũng có thể dùng template. Script này sẽ sao chép một thư mục component mẫu và đổi tên file giúp bạn.

#!/bin/bash

COMPONENT=$1

if [ -z "$COMPONENT" ]; then
  echo "Usage: ./copy-template.sh Button"
  exit 1
fi

echo "Creating $COMPONENT from template..."
cp -r templates/component "components/$COMPONENT"
mv "components/$COMPONENT/Component.tsx" "components/$COMPONENT/$COMPONENT.tsx"
mv "components/$COMPONENT/Component.test.tsx" "components/$COMPONENT/$COMPONENT.test.tsx"

sed -i '' "s/Component/$COMPONENT/g" components/$COMPONENT/*.tsx

echo "$COMPONENT scaffolded!"

Rất tuyệt nếu bạn theo atomic design, pattern tái sử dụng, hoặc chỉ đơn giản là thích có cấu trúc từ đầu. Làm một lần, dùng mãi mãi.

7. create-next-template.sh: Tạo mẫu Next.js với Tailwind, ESLint và API Route

"Trùm cuối"! Tôi rất thích khởi động các dự án mới khi có ý tưởng. Script này giúp bạn có sẵn:

  • Next.js
  • Tailwind CSS
  • ESLint
  • Route API

... tất cả chỉ trong khoảng 30 giây.

#!/bin/bash

read -p "Project name: " PROJECT_NAME
yarn create next-app $PROJECT_NAME --typescript
cd $PROJECT_NAME

git init && git add . && git commit -m "init"

yarn add -D tailwindcss postcss autoprefixer
npx tailwindcss init -p

cat > tailwind.config.js <<EOL
module.exports = {
  content: ["./app/**/*.{ts,tsx}", "./pages/**/*.{ts,tsx}", "./components/**/*.{ts,tsx}"],
  theme: { extend: {} },
  plugins: [],
};
EOL

echo '@tailwind base;\n@tailwind components;\n@tailwind utilities;' > styles/globals.css

yarn add -D eslint prettier eslint-config-prettier eslint-plugin-prettier

cat > .prettierrc <<EOL
{
  "semi": false,
  "singleQuote": true,
  "trailingComma": "all"
}
EOL

mkdir -p pages/api
cat > pages/api/ping.ts <<EOL
import type { NextApiRequest, NextApiResponse } from 'next'

export default function handler(_: NextApiRequest, res: NextApiResponse) {
  res.status(200).json({ message: 'pong' })
}
EOL

git add . && git commit -m "feat: add Tailwind, Prettier, ping API"

echo "Project $PROJECT_NAME ready! Run 'cd $PROJECT_NAME && yarn dev'"

Một vài ý tưởng khác

  • Template: Lưu giữ các style, component phổ biến, hoặc cấu trúc thư mục yêu thích.
  • Script test: Dễ dàng chạy test cụ thể mà không phải tìm lại câu lệnh cũ trong terminal.
  • Script build: Tự động hóa quá trình build, deploy — ví dụ build xong deploy lên Vercel luôn.

Lời kết

Lập trình viên frontend phải xoay sở với đủ thứ: API, build, design system, CLI… Những script như thế này không chỉ tiết kiệm thời gian mà còn giúp bạn giải phóng trí óc để tập trung vào vấn đề thực sự.

Nếu script chỉ dùng cho 1 project, hãy thêm nó vào package.json với yarn script. Nếu dùng cho nhiều project? Viết riêng ra nhé.

Hãy tự động hóa bất cứ điều gì lặp lại nhiều lần. Bạn không cần dùng hết các script, nhưng chỉ cần 1–2 cái là đã thấy như có trợ lý dev mini trong terminal rồi.

Cảm ơn các bạn đã theo dõi!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí