Tidak suka iklan? Pergi Bebas Iklan Hari ini

Makefile untuk Pengembang — Otomatisasi Tugas Tanpa Kode Bash yang Kacau

Diperbarui pada

Make adalah alat pembangunan tahun 1977 yang ternyata sangat baik sebagai alat tugas proyek. Satu Makefile, make test, selesai — tidak perlu skrip bash untuk dipertahankan, tidak perlu menginstal ketergantungan.

Makefile untuk Pengembang — Otomatisasi Tugas Tanpa Kode Bash yang Kacau 1
IKLAN · HAPUS?

Kamu tahu bagaimana halnya. Sebuah proyek dimulai bersih. Lalu seseorang menambahkan sebuah run.sh. Lalu build.sh. Lalu sebuah deploy.sh yang mengambil sumber dari sebuah .env dan memanggil dua yang pertama dalam urutan tertentu, dan tiba-tiba ada enam file shell yang tidak ingin dipegang dan sebuah README yang mengatakan “lihat folder skrip.”

Lakukan perbaikan pada hal itu. Satu Makefile di akar proyek, make test, selesai.

Ini bukan tentang sistem pembangunan C. Make diciptakan sebelum Linux dan awalnya dirancang untuk kompilasi berdasarkan ketergantungan — tetapi mekanisme intinya (target yang bernama dan menjalankan perintah shell) membuatnya menjadi alat tugas yang sangat layak digunakan untuk setiap stack. Node, Python, Go, Rust, Docker, atau apa pun yang sedang dibangun.

Cara Make bekerja sebenarnya

Sebuah Makefile adalah daftar target. Setiap target memiliki nama, ketergantungan opsional, dan blok perintah shell:

.PHONY: build test lint clean

build:
	npm run build

test:
	npm test

Dua hal yang membuat semua orang bingung saat pertama kali mengenalinya:

  • Pengaturan indentasi harus merupakan karakter tab yang benar, bukan spasi. Setiap editor yang mengubah tab secara otomatis akan secara diam-diam menghancurkan Makefile Anda sampai Anda mengatur ulang konfigurasinya. Ini sudah benar sejak 1977 dan Make tidak akan memaafkan Anda jika Anda menggunakan spasi.
  • Secara default, Make menganggap nama target sebagai nama file. Jika sebuah file bernama build ada di akar proyek, make build tidak akan dilakukan karena Make menganggap target tersebut sudah “dibangun.” Solusinya adalah .PHONY.

Deklarasikan setiap target yang bukan nama file nyata sebagai .PHONY. Dalam praktiknya, Makefile yang digunakan sebagai alat tugas mengklaim setiap target karena tidak ada yang menghasilkan file. Baris Anda .PHONY akan berakhir seperti baris pertama template di bawah ini.

Variabel dan penggantian dari baris perintah

Make memiliki sintaks variabelnya sendiri — terlihat seperti shell tetapi berperilaku berbeda:

DOCKER_IMAGE = myapp
TAG = latest

build:
	docker build -t $(DOCKER_IMAGE):$(TAG) .

Overset dari baris perintah: make build TAG=v1.2.3. Tidak perlu mengedit file untuk versi yang dibangun atau penempatan berdasarkan lingkungan. Variabel lingkungan shell juga tersedia secara otomatis — $(HOME), $(PATH), apa pun yang ada di lingkungan saat Anda menjalankan make.

Template Makefile siap digunakan

Salin ini, hapus yang tidak relevan, sesuaikan perintah untuk stack Anda:

.PHONY: install build test lint clean run docker-up docker-down help

# --- Config -------------------------------------------------------------------
DOCKER_COMPOSE = docker compose
APP_NAME = myapp

# --- Default target -----------------------------------------------------------
help:
	@echo "Available targets:"
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "  %-15s %s\n", $$1, $$2}'

# --- Dev ----------------------------------------------------------------------
install: ## Install dependencies
	npm ci

run: ## Start the dev server
	npm run dev

build: ## Build for production
	npm run build

# --- Quality ------------------------------------------------------------------
lint: ## Run the linter
	npm run lint

test: ## Run the test suite
	npm test

test-watch: ## Run tests in watch mode
	npm run test:watch

# --- Docker -------------------------------------------------------------------
docker-up: ## Start services via docker compose
	$(DOCKER_COMPOSE) up -d

docker-down: ## Stop and remove containers
	$(DOCKER_COMPOSE) down

docker-logs: ## Tail container logs
	$(DOCKER_COMPOSE) logs -f

# --- Cleanup ------------------------------------------------------------------
clean: ## Remove build artifacts and caches
	rm -rf dist node_modules/.cache .next

Itu help target menggunakan pola grep + awk untuk mengambil komentar inline ke dalam dokumentasi yang terformat. Jalankan ## dan Anda akan mendapatkan daftar terurut dari setiap target beserta deskripsinya — tanpa perlu mempertahankan dokumen terpisah. Ini adalah potongan yang paling diambil dari sejarah Makefile karena alasan yang sangat baik. make help Menghubungkan target untuk CI

Make menangani ketergantungan secara natif. Daftarkan target sebagai ketergantungan untuk menjalankannya secara berurutan:

melakukan lint, lalu uji, lalu build. Jika langkah apa pun keluar dengan kode non-nol, Make berhenti. Ini adalah perilaku CI yang benar — gagal secara jelas, jangan menyembunyikan langkah yang rusak.

ci: lint test build ## Full CI check (lint -> test -> build)

make ci Menekan echo dan menulis perintah multi-baris

Secara default, Make mencetak setiap perintah sebelum menjalankannya. Sisipkan

untuk menekan: @ Untuk perintah yang melintasi baris, hubungkan dengan

setup:
	@echo "Setting up project..."
	@cp .env.example .env
	@npm ci
	@echo "Done."

— ini berhenti jika gagal, berbeda dengan tanda koma yang terus berjalan meskipun ada kesalahan: && Ketika Make adalah alat yang salah

migrate:
	npm run db:migrate && \
	npm run db:seed && \
	echo "Migration complete"

Make tersedia di macOS (melalui Xcode Command Line Tools) dan setiap distribusi Linux. Tidak perlu instalasi, tidak ada konflik versi, tidak ada gesekan bagi sebagian besar tim pengembang.

Kekurangannya:

— WSL bekerja dengan baik, tetapi Windows native tidak memiliki make tanpa Chocolatey, Scoop, atau port GnuWin32. Jika tim Anda adalah tim Windows native,

Menjaga Makefile Anda tetap bersih

Ketika Makefile tumbuh di antara banyak kontributor dan penggabungan, drift indentasi dan spasi terjadi. Karena Make sangat sensitif terhadap spasi, satu spasi yang tidak sengaja sebagai tab secara diam-diam menghancurkan target tanpa pesan kesalahan yang membantu.

Formatter Makefile IO Tools mengatur indentasi dan membersihkan ruang kosong tanpa mengganggu logika — berguna sebagai pengecekan keamanan sebelum commit. Makefile untuk Pengembang — Otomatisasi Tugas Tanpa Bash Spaghetti 2

Ingin bebas iklan? Bebas Iklan Hari Ini

Instal Ekstensi Kami

Tambahkan alat IO ke browser favorit Anda untuk akses instan dan pencarian lebih cepat

Ke Ekstensi Chrome Ke Ekstensi Tepi Ke Ekstensi Firefox Ke Ekstensi Opera

Papan Skor Telah Tiba!

Papan Skor adalah cara yang menyenangkan untuk melacak permainan Anda, semua data disimpan di browser Anda. Lebih banyak fitur akan segera hadir!

IKLAN · HAPUS?
IKLAN · HAPUS?
IKLAN · HAPUS?

Pojok Berita dengan Sorotan Teknologi

Terlibat

Bantu kami untuk terus menyediakan alat gratis yang berharga

Belikan aku kopi
IKLAN · HAPUS?