(archive) google/clasp 2.4.0でpackage.jsonが必要

(21.08.15 追記): google/clasp 2.4.1でfix済み(#840, #862)

google/clasp 2.4.0では、最低でも空({})のpackage.jsonを作る必要がある。

もしくは、google/clasp 2.3.1を使うことでclasp動かない問題をバイパスできる。

何が起こったか

google/clasp 2.4.0にて、package.jsonが無いフォルダでclaspコマンドを使用できない。

以下の通り、package.jsonがないとエラーが発生する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
$ clasp
node:fs:505
  handleErrorFromBinding(ctx);
  ^

Error: ENOENT: no such file or directory, open 'package.json'
    at Object.openSync (node:fs:505:3)
    at Object.readFileSync (node:fs:401:35)
    at file:///usr/local/lib/node_modules/@google/clasp/node_modules/ts2gas/src/index.js:35:35
    at ModuleJob.run (node:internal/modules/esm/module_job:154:23)
    at async Loader.import (node:internal/modules/esm/loader:177:24)
    at async Object.loadESM (node:internal/process/esm_loader:68:5) {
  errno: -2,
  syscall: 'open',
  code: 'ENOENT',
  path: 'package.json'
}

後述の通り、依存ライブラリのts2gasに依るのでどの開発環境でも発生する。

原因について

clasp 2.4.0より、依存ライブラリts2gasのバージョンが3.6.4 → 4.0.0に上がった。

ts2gas 3.6.4ではts2gasをimport・実行するとpackage.jsonを読むようになっていたが、

4.0.0ではts2gasライブラリをimportした時点でpackage.jsonを読むようになっていた。

該当コード箇所(github: ts2gas)

clasp側では、src/files.tsでts2gasをimportするのでエラーとなった※。

clasp 2.3.1以下では、ts2gasをimportした時点ではpackage.jsonを読んでいなかったのでエラーとならなかった。

※ 厳密には、src/index.ts → commands/clone, commands/push, commands/pull, commands/status → src/files.tsとimportしている。

対策

clasp 2.4.0のまま使いたい場合、最低でも空({})のpackage.jsonを作っておく。

過去のclaspで問題なければ、2.3.1を利用する。

参考サイト

google/clasp #856: Issue with using clasp after v2.4.0 release https://github.com/google/clasp/issues/856