アホらしいミスなんだけど、一応こういうのも誰かの役に立つかも知れない。
なんでこんなにエラーの特定に時間がかかったのかというと、ノートPCが故障修理中で、代替機でなんとかやりくりしている時だったので、考えられる要因が多すぎたのだ。
そしてまた、webにあるいろんな情報がまたそれらしく見えるものばかりだったのである。
- バックアップデータを別PCに移した
- 代替機が新品だったので、npmもGitも何もかも再インストールしたので、バージョンが変化した可能性がある
- 代替機をクリーンに使おうと、exFATの外付けHDDを使っていた
- 顧客仕様が変わって、jsファイルの構成を変えた(結果から言うと、これが真の原因だった)
C:\Users\some_user\Documents\foobar\foobar-kintone>kintone-cli deploy --app-name foobar-invoice npm ERR! code ELIFECYCLE npm ERR! errno 2 npm ERR! foobar-kintone@0.0.1 build-foobar-invoice: `webpack --config foobar-invoice/webpack.config.js "--mode" "production"` npm ERR! Exit status 2 npm ERR! npm ERR! Failed at the foobar-kintone@0.0.1 build-foobar-invoice 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! C:\Users\shimbo\AppData\Roaming\npm-cache\_logs\2020-03-05T08_27_20_383Z-debug.log
考えたこと
- node_modulesが不具合を起こしている?
- nodemodulesフォルダの中のどれかのファイルがアクセス不能になっている?
- ファイルシステムの破損でアクセスできないファイルがある?
- exFATのせいで、ファイルにアクセスできない?
- webpackのconfigが間違っていて「依存ファイルが足りない」と判定されている ←これが正解
npm ERR! errno 2
が生じた際の対処について、Googleで検索するとほとんどはnode_modules
の再インストールが答えだと書かれている。
真の答えはつまり「node_modules
の中にアクセスできないものがあるようです」ということではなかろうか。
その答えとしての「node_module
破損→再インストール」であり、「ファイルアクセス権の修正」であり、「webpackの依存ファイルの設定」なのだ。
node_modules
の再インストール
まずnode_modules
ディレクトリとpackage-lock.json
を削除する。webではコマンドラインから削除している場合が多いが、私はコマンドラインから削除すると失敗しそうで怖かったので、愛用のファイラーから削除した。
余談だが、この時にファイルシステムの不正で削除できないディレクトリがあり、chkdsk
コマンドで修復をかけたりしたので、それもまた原因がわからなくなる一因だった。
削除した後は、キャッシュを削除。
npm cache clean --force npm cache clear --force//エイリアスなので、clear cleanどちらでもいい模様
キャッシュを削除するコマンドを打つと「あんた、自分が何をしているか、わかってんだろうね?」と怖いことを言われるが、恐れることはない。次にnpm_modules
の再インストール。
npm install
普通はこれで治るらしい。
アクセス権の修正
たまにアクセス権が不正になってしまうパターンがあるらしい。可能性としてはフォルダ破損とどっこいどっこいというところだと思うが。
Unix系ならchmod
、PowerShellだとcacls
が非推奨になったのでicacls
を使ってアクセス権を修正せよとある。
ちょっとオプションが面倒だったので、エクスプローラーのGUIに頼った。
webpack.config.js
の修正
エラーメッセージをよく読み返しているうち、どうも問題はjsのファイル構成を変更したことのように思われてきた。よく調べたら、jQueryを外部依存にしているのに、依存をwebpack.config.js
に書き忘れている。
//(略) externals: { jquery: 'jQuery' } //(略)
ただそれだけ、それだけのことだったのだ!