2020/8/25 Parsing error: Cannot read property 'map' of undefined
0:0 error Parsing error: Cannot read property 'map' of undefined
が出る、typescript 更新されて parser が追いついてない時にでがちなやつ
デバッグしてみる
$ yarn eslint ./components/blog/filter.ts --debug
code:output
...
eslint:cli-engine Lint /Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/components/blog/filter.ts +0ms
eslint:linter Linting code for /Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/components/blog/filter.ts (pass 1) +0ms
eslint:linter Verify +0ms
eslint:linter With ConfigArray: /Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/components/blog/filter.ts +0ms
eslint:linter Parsing error: Cannot read property 'map' of undefined
eslint:linter TypeError: Cannot read property 'map' of undefined
at Converter.convertNode (/Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/node_modules/gts/node_modules/@typescript-eslint/typescript-estree/dist/convert.js:2095:53)
at Converter.converter (/Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/node_modules/gts/node_modules/@typescript-eslint/typescript-estree/dist/convert.js:72:29)
at Converter.convertType (/Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/node_modules/gts/node_modules/@typescript-eslint/typescript-estree/dist/convert.js:156:21)
at Converter.convertTypeAnnotation (/Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/node_modules/gts/node_modules/@typescript-eslint/typescript-estree/dist/convert.js:190:34)
at Converter.convertNode (/Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/node_modules/gts/node_modules/@typescript-eslint/typescript-estree/dist/convert.js:591:46)
at Converter.converter (/Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/node_modules/gts/node_modules/@typescript-eslint/typescript-estree/dist/convert.js:72:29)
at Converter.convertChild (/Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/node_modules/gts/node_modules/@typescript-eslint/typescript-estree/dist/convert.js:147:21)
at /Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/node_modules/gts/node_modules/@typescript-eslint/typescript-estree/dist/convert.js:203:32
at Array.map (<anonymous>)
at Converter.convertBodyExpressions (/Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/node_modules/gts/node_modules/@typescript-eslint/typescript-estree/dist/convert.js:202:14) +29ms
eslint:linter Generating fixed text for /Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/components/blog/filter.ts (pass 1) +0ms
eslint:source-code-fixer Applying fixes +0ms
eslint:source-code-fixer shouldFix parameter was false, not attempting fixes +0ms
eslint:cli-engine Linting complete in: 952ms +30ms
/Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/components/blog/filter.ts
0:0 error Parsing error: Cannot read property 'map' of undefined
✖ 1 problem (1 error, 0 warnings)
...
gts の依存の @typescript-eslint/ が古いやつなんだな ./node_modules/gts/.eslintrc.json で参照している "parser": "@typescript-eslint/parser", はちゃんと ./node_modules/gts/node_modules/ 以下から探されるのか
extends していたら、extends 先のファイルを基準に module が探される?
extends した上で、設定をちょっと書き加えたい場合、親でも @typescript-eslint/... のインストールが必要だし、バージョンが合わないことになる?
gts clone してきて ビルドして yarn link して、使う側で yarn link gts する
うまくいく
はやく gts リリースしてほしいな〜
dependencies で github 見に行けないかな
ビルドされてないので微妙? prepare には書いてあるが...
prepare: Run both BEFORE the package is packed and published, on local npm install without any arguments, and when installing git dependencies (See below). This is run AFTER prepublish, but BEFORE prepublishOnly.
git dependencies は
<protocol> is one of git, git+ssh, git+http, git+https, or git+file.
git dependencies を install したときは prepare が走る、そこでビルドしていたら使えるはず
"gts": "git+https://github.com/google/gts.git#master",
を package.json に書いたらビルドはされるようになったけど、うまくいかないな
code:error
Error: Cannot read config file: /Users/pokutuna/.ghq/github.com/pokutuna/pokutuna-com/node_modules/gts/build/src/index.js
Error: Cannot find module '../.eslintrc.json'
ビルドしても node_moduels/gts/build/.eslintrc.json がない
これはどこで置かれる?
あるいは使う側で
"extends": ["./node_modules/gts/", ...], から
"extends": ["./node_modules/gts/.eslintrc.json", ...], にする
この .eslintrc.json どこで置かれるんだ
build したら置かれる気がするが...
build も compile も同じ
resolveJsonModule で置かれるんかな
git dependencies で install したら files だけ残されるのかな?
配布している tarball には入ってる
code:output
-rw-rw-r-- 0 0 0 1407 10 26 1985 package/.eslintrc.json
-rw-rw-r-- 0 0 0 1663 10 26 1985 package/build/.eslintrc.json
リポジトリからビルドして消えるのはなんでだろうな
prepare が走ったあと files 以外消す、という挙動がある気がしている
files について特に書いてない
docker 内で npm install gts@git+https://github.com/google/gts.git してみる
npm ならできない、yarn ならできる
npm
code:npm-install-output
6198 verbose stack Error: ENOENT: no such file or directory, chmod '/hoge/node_modules/gts/build/src/cli.js'
6199 verbose cwd /hoge
6200 verbose Linux 4.19.76-linuxkit
6202 verbose node v12.18.2
6203 verbose npm v6.14.5
6204 error code ENOENT
6205 error syscall chmod
6206 error path /hoge/node_modules/gts/build/src/cli.js
6207 error errno -2
6208 error enoent ENOENT: no such file or directory, chmod '/hoge/node_modules/gts/build/src/cli.js'
6209 error enoent This is related to npm not being able to find a file.
files の bin に実行権限つけようとしてコケている??
prepare して bin が作られる場合普通に問題になりそうだが...
暇ならissueたててもいいかも
yarn
install して tsc も走り終えるが、build/.eslintrc.json は無い
$ yarn --verbose add -D gts@git+https://github.com/google/gts.git
code:yarn-add-output
verbose 43.456363957 Copying "/usr/local/share/.cache/yarn/v6/npm-gts-2.0.2-07d2863b140ff8cbca3d3d01a78f4e22cd29aeb2/node_modules/gts/.eslintrc.json" to "/node_modules/gts/.eslintrc.json".
verbose 43.456546725 Copying "/usr/local/share/.cache/yarn/v6/npm-gts-2.0.2-07d2863b140ff8cbca3d3d01a78f4e22cd29aeb2/node_modules/gts/.prettierrc.json" to "/node_modules/gts/.prettierrc.json".
verbose 43.457211851 Copying "/usr/local/share/.cache/yarn/v6/npm-gts-2.0.2-07d2863b140ff8cbca3d3d01a78f4e22cd29aeb2/node_modules/gts/CHANGELOG.md" to "/node_modules/gts/CHANGELOG.md".
verbose 43.457633969 Copying "/usr/local/share/.cache/yarn/v6/npm-gts-2.0.2-07d2863b140ff8cbca3d3d01a78f4e22cd29aeb2/node_modules/gts/LICENSE" to "/node_modules/gts/LICENSE".
verbose 43.457979872 Copying "/usr/local/share/.cache/yarn/v6/npm-gts-2.0.2-07d2863b140ff8cbca3d3d01a78f4e22cd29aeb2/node_modules/gts/README.md" to "/node_modules/gts/README.md".
verbose 43.458314562 Copying "/usr/local/share/.cache/yarn/v6/npm-gts-2.0.2-07d2863b140ff8cbca3d3d01a78f4e22cd29aeb2/node_modules/gts/package.json" to "/node_modules/gts/package.json".
verbose 43.458953569 Copying "/usr/local/share/.cache/yarn/v6/npm-gts-2.0.2-07d2863b140ff8cbca3d3d01a78f4e22cd29aeb2/node_modules/gts/tsconfig-google.json" to "/node_modules/gts/tsconfig-google.json".
verbose 43.460040914 Copying "/usr/local/share/.cache/yarn/v6/npm-gts-2.0.2-07d2863b140ff8cbca3d3d01a78f4e22cd29aeb2/node_modules/gts/tsconfig.json" to "/node_modules/gts/tsconfig.json".
yarn は install process で prepare とかもろもろ解釈して、files をインストール先へ copy する
この挙動によって build/.eslintrc.json が漏れていそう
挙動についての議論がある issue
斜め読みだけど認識はあっていそう
gts 自体結構リリース間隔が開きがちなので、npm install gts@head とかで今の master のビルドが落ちてきて欲しいな 👉 Issue たてる
そのうえで gts の package.json:files に追加して欲しい PR するかな
$ docker run --rm -it node:latest /bin/sh -c 'mkdir workspace && cd workspace && yarn init -y && yarn add -D gts@git+https://github.com/google/gts.git#master --verbose --no-color && ls -a node_modules/gts/build/' > logs.txt