Nền Tảng Đơn: Makefile Là Công Cụ Xuất Bản Đa Nền Tảng
Vấn Đề
Tôi viết ở một nơi. Độc giả thì ở khắp mọi nơi.
Tôi cập nhật nội dung. Các phiên bản cũ vẫn tồn tại mãi mãi trên nhiều nền tảng khác nhau.
Tôi xuất bản thủ công. Thời gian trôi đi với mỗi lần sao chép-dán.
Khám Phá
Nội dung của tôi sống trong Git. Đó là nguồn gốc duy nhất của sự thật.
GitBook đọc từ Git. dev.to có thể đọc từ Git. Medium cũng có thể đọc từ Git. Mọi thứ đều có thể đọc từ Git.
Vậy tại sao tôi lại phải sao chép-dán?
Kiến Trúc
Git (Nguồn Gốc của Sự Thật)
↓
GitHub (Quản Lý Phiên Bản)
↓
GitBook (Giao Diện Chính)
↓
Makefile (Công Cụ Xuất Bản)
├-> dev.to
├-> Medium
├-> Hashnode
└-> Bất Kỳ Nơi Đâu
Một nguồn. Vô số điểm đến.
Triển Khai
Quản Lý Trạng Thái Không Cần Cơ Sở Dữ Liệu
# .clarity/devto-articles.json
{
"ten-bai-viet": "2829234", # ID bài viết trên dev.to
"bai-khac": "2829233"
}
# .clarity/devto-checksums.json
{
"ten-bai-viet": "a3f5b2c8d9e1f4g6", # MD5 hash
"bai-khac": "b4g6c3d0e2f5a7h8"
}
Không cần cơ sở dữ liệu. Chỉ cần các tệp JSON. Git theo dõi chúng. Đơn giản.
Phát Hiện Thay Đổi Không Phức Tạp
CURRENT_CHECKSUM=$(md5 -q article.md)
SAVED_CHECKSUM=$(jq -r '.article' .clarity/devto-checksums.json)
if [ "$CURRENT_CHECKSUM" = "$SAVED_CHECKSUM" ]; then
echo "[OK] Không có thay đổi, bỏ qua"
else
# Cập nhật chỉ những gì đã thay đổi
fi
So sánh hash MD5. Tệp đã thay đổi? Cập nhật. Tệp không thay đổi? Bỏ qua.
Khác Biệt Nền Tảng Là Tính Năng
GitBook sử dụng thẻ \
nhưng dev.to không hiểu chúng.
Giải pháp? Loại bỏ chúng trong quá trình xuất bản:
`makefile CONTENT=$(cat article.md | sed 's///g') `
Mỗi nền tảng có thực tế riêng của nó. Thích nghi, đừng chống đối.
Quy Trình Làm Việc
- Viết bằng Markdown (Git)
- Đẩy lên GitHub
- GitBook tự động cập nhật (webhook)
- Chạy
make sync-devto
- Tất cả các nền tảng được cập nhật
Một lệnh. Tất cả các nền tảng đồng bộ.
Ví Dụ Thực Tế Từ Hệ Thống Của Tôi
Tạo Bài Viết Mới
`bash
Viết tại địa phương
code docs/claude-ai-vibe-coding/new-article.md
Đẩy lên Git
git add . && git commit -m "bài viết mới" && git push
Đồng bộ mọi nơi
make sync-devto # Cập nhật hoặc tạo theo nhu cầu
`
Cập Nhật Bài Viết Hiện Có
`bash
Chỉnh sửa tại địa phương
code existing-article.md
Hệ thống phát hiện thay đổi qua MD5
make sync-devto
Kết quả: [OK] Tên Bài Viết - Không có thay đổi, bỏ qua
hoặc
Kết quả: -> Đang Cập Nhật: Tên Bài Viết (ID: 2829234)
`
Giới Hạn Tốc Độ? Giải Quyết
`makefile if [ "$HTTP_CODE" = "429" ]; then echo "Giới hạn tốc độ. Chờ 35 giây..." sleep 35 $(MAKE) retry fi `
Kiên nhẫn như mã. Không phải xử lý lỗi, mà là triển khai tính năng.
Tại Sao Là Makefile?
Tôi đã sử dụng GitHub Actions. Sau đó tôi tỉnh dậy.
GitHub Actions = Máy tính của họ, quy tắc của họ, thời gian của họ.
Makefile = Máy tính của tôi, quy tắc của tôi, thời gian của tôi.
`makefile
Điều này chạy trên MÁY CỦA TÔI
publish:
@echo "Tôi kiểm soát điều này"
Điều này chạy trên MÁY CỦA HỌ
.github/workflows/publish.yml
Tôi chờ, tôi hi vọng, tôi cầu nguyện
`
Kiểm soát quan trọng hơn tiện lợi.
Triết Lý
Nguồn Gốc Đơn: Git. Không phải Notion, không phải Google Docs. Git.
Không Phụ Thuộc Nền Tảng: Viết một lần, xuất bản ở mọi nơi.
Tự Động Hóa Trên Ký Ức: Tôi không nhớ để cập nhật. Mã nhớ cho tôi.
Trạng Thái Không Cần Cơ Sở Dữ Liệu: Tệp JSON trong .clarity/
. Git theo dõi chúng. Xong.
Thích Nghi, Đừng Ép Buộc: Mỗi nền tảng là khác nhau. Biến đổi nội dung để phù hợp.
Nhận Diện Mô Hình
Điều này không chỉ về việc viết blog. Nó liên quan đến:
- Luồng Thông Tin: Một nguồn -> Nhiều đích
- Quản Lý Trạng Thái: Tệp cục bộ > Cơ sở dữ liệu từ xa
- Phát Hiện Thay Đổi: Checksums > Timestamps
- Thực Tế Nền Tảng: Biến đổi > Phàn nàn
- Kiểm Soát: Makefile > Dịch vụ CI/CD
Bắt Đầu Của Bạn
`makefile
Nhà xuất bản khả thi tối thiểu
sync:
@for article in docs/*.md; do \
if [ file_changed ]; then \
curl -X POST platform.com/api \
-d "$$(cat $$article)"
fi
done
`
Mở rộng từ đây. Thêm trạng thái. Thêm checksums. Thêm nền tảng.
Kết Quả
- Viết một lần, xuất bản ở mọi nơi
- Không cập nhật thủ công
- Không quên nền tảng
- Không có sự không khớp phiên bản
- Kiểm soát hoàn toàn
Blog của tôi có mặt ở khắp mọi nơi. Thời gian của tôi là của tôi.
Kết Luận
Ngừng đăng nhập vào các nền tảng. Ngừng sao chép-dán. Ngừng nhớ để cập nhật.
Viết trong Git. Để Makefile xử lý phần còn lại.
Xuất bản không phải là về nền tảng. Nó là về luồng.
Git -> Makefile -> Thế Giới.
Đó là tất cả. Đó là hệ thống.
Phần của triết lý Tài liệu Zero -> Mã Sống. Xem thêm: Git như động cơ tiến hóa - cách mà các commit trở thành bài học.
Đọc nguyên bản: Nền Tảng Đơn: Makefile Là Công Cụ Xuất Bản Đa Nền Tảng