2020/8/25 Parsing error: Cannot read property 'map' of undefined
from eslint
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:file-enumerator Complete iterating files: "./components/blog/filter.ts" +951ms
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 する
👉 npm/yarn
うまくいく
はやく gts リリースしてほしいな〜
dependencies で github 見に行けないかな
ビルドされてないので微妙? prepare には書いてあるが...
npm-scripts | npm Documentation
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
$ curl -s https://registry.npmjs.org/gts/-/gts-2.0.2.tgz | tar tv | grep .eslintrc.json
-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 以外消す、という挙動がある気がしている
cli/scripts.md at 66092d5ce22b326c4d4aed1c5073ae7a6a4f4aa2 · npm/cli
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
6201 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "git+https://github.com/google/gts.git#master"
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.
6210 verbose exit -2, true
files の bin に実行権限つけようとしてコケている??
prepare して bin が作られる場合普通に問題になりそうだが...
Issues · npm/cli なさそう?
暇ならissueたててもいいかも
yarn
install して tsc も走り終えるが、build/.eslintrc.json は無い
yarn add | Yarn わかんねえ
$ 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 が漏れていそう
yarn install ignores files from local dependencies · Issue #2822 · yarnpkg/yarn
挙動についての議論がある issue
斜め読みだけど認識はあっていそう
gts 自体結構リリース間隔が開きがちなので、npm install gts@head とかで今の master のビルドが落ちてきて欲しいな 👉 Issue たてる
How about providing a tagged package refers to the head · Issue #554 · google/gts
そのうえで gts の package.json:files に追加して欲しい PR するかな
Add build/.eslintrc.json to the files field in package.json by pokutuna · Pull Request #553 · google/gts
$ 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
#eslint #gts #Node