nuxtでコンパイル時に"No parser and no filepath given..."というメッセージのエラーが出てくるけど原因や対処方法がどこにも見つからなかったので記録しておきます。
エラー内容
nuxt実行時に以下のエラーが複数回表示される(昔は出なかった気がした)
No parser and no filepath given, using 'babylon' the parser now but this will throw an error in the future. Please specify a parser or a filepath so one can be inferred.
特にエラー(警告)が表示されているだけで、実行に問題はなさそうだが気になる。
確認したパッケージバージョン
nuxt 1.4.0
vue-loader 13.7.0
prettier 1.13.4
原因
調べてみるとvue-loaderがtemplate-compilerを実行する時にprettierというパッケージを呼びに行ってそこでエラーが出ている模様
prettierを見に行くと1.13.0以降はdefault値がbabylonからundefinedに変更になっている
....
parser: {
since: "0.0.10",
category: CATEGORY_GLOBAL,
type: "choice",
default: [
{ since: "0.0.10", value: "babylon" },
{ since: "1.13.0", value: undefined }
],
.....
}
修正が入ったのがこれを書いている9日前くらい(2018/5/24前後?)の変更のようだ。
対処方法
ということでそのうち対応されると思うけど、prettierを1.12などにダウンレードするか、暫定的に以下のようにparserを指定するとエラーは消える。
node-modules/vue-loader/lib/template-compiler/index.js:80
...
code = prettier.format(code, { semi: false, parser:'babylon' })
...
わざわざ選択できるようになったparserを固定値にしてしまうのが良いかは議論があるかと思いますし、インストールしたパッケージを上書き修正するわけにはいかないですのでforkするしか無いですが。
pull-requestするならちゃんとオプション値を渡せるようにしたほうがいいと思うしな...。