npm で TS2304 (Cannot find name '***') というエラーが出る時の原因と対処
エラー
npm -i
したらこんなエラーが.
node_modules/@types/superagent/index.d.ts:29:29 - error TS2304: Cannot find name 'Blob'. 29 type MultipartValueSingle = Blob | Buffer | fs.ReadStream | string | boolean | number; ~~~~ node_modules/@types/superagent/index.d.ts:116:14 - error TS2304: Cannot find name 'XMLHttpRequest'. 116 xhr: XMLHttpRequest; ~~~~~~~~~~~~~~
原因
- それぞれを呼ぶライブラリが足りなかったせい
解決
- オプション
--lib dom
を付けてインストールし直すことで,不足している標準ライブラリを一緒にインストールしてくれる
$ npm i --lib dom npm notice created a lockfile as package-lock.json. You should commit this file. + dom@0.0.3 added 1 package and audited 10248 packages in 4.722s found 0 vulnerabilities
参考
@types/superagent error TS2304: Cannot find name 'XMLHttpRequest'. #12044
dropColumnするつもりでdropしたらテーブルを消そうとしてびっくりした
原因
dropColumn
するべきところで drop
をしていた.
リファレンス
存在するテーブルを削除する場合は、dropかdropIfExistsメソッドを使います。
コードとエラー
// 正しいコード Schema::connection($this->connection)->table('tableName', function (Blueprint $table) { $table->dropColumn('createdAt'); $table->dropColumn('updatedAt'); }); // 間違ってるコード Schema::connection($this->connection)->table('tableName', function (Blueprint $table) { $table->drop('createdAt'); $table->drop('updatedAt'); });
- エラーの内容
[Illuminate\Database\QueryException] SQLSTATE[42S02]: Base table or view not found: 1051 Unknown table 'databaseName.tableName' doesn't exist (SQL: drop table `products`)
唐突の drop table
😱
エラーにならなかったら恐ろしいことになってしまう.
ここで一番怖いと思ったことが, $table->drop('ココ')
で指定しているのがテーブル名でなくカラムなのに $table
で指されているテーブルを消そうとしていたこと.
「タイポでした〜😂」じゃすまないっすよ...
ちなみに,phpは関数の引数の数が合ってなくても動くので、$table->drop(‘カラム名’)
と書いても死なずに $table->drop()
と同等の動作をするためこのようなことになったと推測...
今回のエラーの追い方
laravel のマイグレーション機能の`string()`で作成したカラムの長さ
string('hoge')
がデフォルトでvarchar幾つになるのか?
laravel のマイグレーション機能で作成したカラムの長さは,
例: $table->string('hoge');
→ varchar(191)
となる.