📦

Cloud Functionsでprepareにハマる

2021/04/18に公開

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が見つからないと言われるのはよく分からないが、preparenpm run compiletscが呼び出された際にパスが通ってないようである。

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"
    ],
...
GitHubで編集を提案

Discussion