Cloud Functionsのディレクトリ構造でhuskyのインストールにハマった

2022-04-30

環境

module version
husky 7.0.4

結論

プロジェクトのルートディレクトリに husky をインストールし、サブディレクトリのnpm-scriptには --prefix オプションを指定する

内容

Cloud Functionsで開発する際のディレクトリ構造は、 functions ディレクトリ配下に package.json やソースコードを配置するアプリケーションのソースコードを一階層ネストした構造になっている。そのため、アプリケーションの開発時は基本的に functions 上で行う。

├── .git
└── functions
    ├── src
    ├── node_modules
    └── package.json

functions 直下でhuskyのREADMEに沿って設定を進めると、npm-script設定後の実行で同じ階層に .git がないためエラーになる

% npm set-script prepare "husky install"
% npm run prepare

> prepare
> husky install

.git can't be found (see https://git.io/Jc3F9)

これは .git と同じ階層で husky のインストールを行うことで解決できる

├── .git
├── node_modules
├── package.json # huskyをインストール
└── functions
    ├── src
    ├── node_modules
    └── package.json

pre-commit, pre-pushといったイベント時にフックされるコマンドもディレクトリ構造によって変更する必要がある。 例えば、READMEにあるcommitにフックしてテストを実行する場合下記のように設定するが、今回のディレクトリ構造では実行できない。

npx husky add .husky/pre-commit "npm test"
├── .git
├── node_modules
├── package.json # フック時に対象とするnpm-script
└── functions
    ├── src
    ├── node_modules
    └── package.json # 実行したいnpm-scriptのtestが定義されている

これは --prefix オプションを指定することで functions/package.json のnpm-scriptを実行できる。

 #!/bin/sh
 . "$(dirname "$0")/_/husky.sh"

-npm test
+npm --prefix functions test

Web系ソフトウェアエンジニアの備忘録

Contact: 3982ne@gmail.com