Node.jsプロジェクトのMakefile
npmスクリプトをラップし、install、build、test、lint、開発サーバーターゲットを持つNode.jsプロジェクト用Makefileを作成し、一貫したインターフェースを提供します。
Language-Specific
詳細な説明
なぜNode.jsでMakeを使うのか?
Node.jsプロジェクトは通常package.jsonのnpmスクリプトを使用しますが、Makefileは多言語プロジェクト間で一貫したインターフェース、依存関係の追跡(package.jsonが変更された場合のみ再インストール)、複雑なワークフローの組み合わせ能力を追加します。
依存関係の追跡
node_modules: package.json package-lock.json
npm ci
@touch node_modules
install: node_modules
ここがMakeが真に輝く部分です。node_modulesターゲットはpackage.jsonとpackage-lock.jsonに依存しています。Makeはどちらかのファイルが変更された場合にのみnpm ciを実行し、繰り返しビルドの時間を節約します。@touchは正確な追跡のためにディレクトリの変更時間を更新します。
ビルドパイプライン
DIST_DIR = dist
build: node_modules
npm run build
dev: node_modules
npm run dev
test: node_modules
npm test
lint: node_modules
npm run lint
lint-fix: node_modules
npm run lint -- --fix
各ターゲットはnode_modulesに依存しており、操作の前にパッケージがインストールされていることを保証します。よくある「npm installを実行しましたか?」という質問がなくなります。
プロダクションビルド
.PHONY: production
production: clean install build
@echo "Production build complete"
productionターゲットはclean、install、buildを順番にチェーンし、CI/CDパイプラインに単一のコマンドを提供します。
クリーンターゲット
clean:
rm -rf $(DIST_DIR) node_modules .next .cache coverage
徹底的なクリーンターゲットはビルド成果物、インストールされたパッケージ、キャッシュディレクトリを削除します。
主な利点
make buildはプロジェクトがnpm、yarn、pnpmのいずれを使用していても同じように動作する- ターゲット間の依存関係により、パッケージインストール前のテスト実行を防止する
- ファイルベースの依存関係追跡により不必要な
npm installの実行を回避する
ユースケース
Node.jsモノレポやチームプロジェクトで標準的なビルドインターフェースを提供する場合、またはNode.jsビルドをより大きな多言語ビルドシステムに統合する場合に使用します。