📦
Cloud Functionsでprepareにハマる
Cloud Functions for FirebaseをTypeScriptで書こうとした時、ササッと整備できるスタイルガイドとしてgtsを使えばかなり楽だが、ハマりポイントがあった話。
gts init
(gtsバージョンは3.1.0時点の話)
gts init
すると、gtsによってpackages.json
に変更が加えられる。
scriptsは次のように、prepareにcompile、つまりはtscを実行するスクリプトが追記される。
packages.json
...
scripts: {
lint: 'gts lint',
clean: 'gts clean',
compile: 'tsc',
fix: 'gts fix',
prepare: 'npm run compile',
pretest: 'npm run compile',
posttest: 'npm run lint'
},
...
しかし、この状態でfirebase deploy
するとFirebase側で次のエラーとなり、関数のデプロイに失敗する。
当然devDependenciesにtypescriptはあるのでtscが見つからないと言われるのはよく分からないが、prepare
→npm run compile
→tsc
が呼び出された際にパスが通ってないようである。
Build failed: > protobufjs@6.10.2 postinstall /workspace/node_modules/protobufjs
> node scripts/postinstall
> functions@undefined prepare /workspace
> npm run compile
> functions@ compile /workspace
> tsc
sh: 1: tsc: not found
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn
npm ERR! file sh
npm ERR! errno ENOENT
npm ERR! functions@ compile: `tsc`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the functions@ compile script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /builder/home/.npm/_cacache/_logs/2021-04-18T11_44_03_823Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! functions@undefined prepare: `npm run compile`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the functions@undefined prepare script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /builder/home/.npm/_logs/2021-04-18T11_44_03_857Z-debug.log; Error ID: beaf8772
解決策
prepare
を削除するだけ。
手元の環境ではfirebase.json
のpredeployでcompileを呼ぶようにしていたので、prepareは必要なかった。
もしprepareが必要な場合は何か工夫が必要だろう。
firebase.json
{
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint",
"npm --prefix \"$RESOURCE_DIR\" run compile"
],
...
Discussion