Firebase CLIとかの出力が2022-01-10の一時期に乱れてた件

※Firebase CLI については更新されたので `npm update` すればもう大丈夫です

※npm 側で対応して該当バージョンが削除されました。よって我々側の作業不要です。

## どうした

`firebase-tools` とかの出力がおかしい。

https://twitter.com/ginpei_jp/status/1480269582367526915

## どうして

依存の依存の（中略）依存である `colors` に変なリリースがあった。作者故意のものなのでそこの更新は期待できなさそう。

- `v1.4.2`, `v1.4.1` ← 問題あり
- `v1.4.0` ← 大丈夫

https://www.npmjs.com/package/colors

## どうする

※既に npm 側で対応されたので、現在は作業不要です。

### 直接利用している場合

過去のバージョンで固定すれば大丈夫。

```console
$ npm install colors@1.4.0
```

### 依存の依存の場合

基本的には対象パッケージの更新待ちです。動く状態の `package-lock.json` が残っている場合、そのままにしておきましょう。

更新が来たら `npm update` で新しいバージョンがインストールされます。

ちなみに対象パッケージ自体のバージョンを下げてもたぶん改善しません。

更新が必要だったり新規プロジェクトとかでロックファイルがない場合は、直接書き換えれば差し当たりは動きます。`package-lock.json` から `"colors"` で検索してね。（このやり方で大丈夫なのか不安。）

```diff_json
 "dependencies": {
   "colors": {
-    "version": "1.4.2",
-    "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.2.tgz",
+    "version": "1.4.0",
+    "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
     "integrity": "sha512-5QhJWPFZqkKIieXJPpCprdOytvH7v0AGWpu9K2jZ4LWkGg3dVBNoYPgGGRpEsc0jb8Boy0ElYrdjH9uXfhRSqw=="
   }
 }
```

（`1.4.x` 以外は大丈夫なので `1.0.3` とかは放っておいてください。）

ロックファイル更新したら `npm ci` で再インストールです。

他に [overrides](https://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides) という仕組みが便利だそう。詳しくは [azu さんの記事](https://zenn.dev/azu/articles/d56615b2e11ad1)を。

## どうしてこうなった

`faker` と同じ作者さんです。2020 年に火事に遭い、寄付も集まらず「これ以上無償では働けない」とのことです。

https://note.com/takahiroyte/n/nd6cceae3af04

今回のニュース。

https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/

npm はかつて `faker` はバージョンを戻すなどしたらしい。~~`colors` も待ってれば npm 側がうまいことやってくれるかも？~~ **やってくれました。もう該当バージョンはレポジトリーから消えています。**

https://twitter.com/marak/status/1479200803948830724

## その他

### 出力が乱れるのはそれはそれでバグ？

作者さんが[むちゃくちゃにしてやる！！](https://twitter.com/ngnchiikawa/status/1459174403149688840)という気持ちで更新したのは間違いないと思うんだけど本来は AA が表示される予定だったっぽい？

https://github.com/Marak/colors.js/commit/074a0f8ed0c31c35d13d28632bd8a049ff136fb6

### `color` じゃないよ

`colors` です。

- https://www.npmjs.com/package/color
- https://www.npmjs.com/package/colors

### `colors` vs colors.js

npm のパッケージ名は `colors`、GitHub のレポジトリー名は colors.js です。

- https://www.npmjs.com/package/colors
- https://github.com/Marak/colors.js

### `npm ls` でリスト表示して確認

依存ツリーとバージョンを表示できるので、不安なひとはこれで確認してみてください。

```console
$ npm ls colors
my-project@0.0.0 /path/to/project
└─┬ firebase-tools@10.0.1
  ├─┬ cli-table@0.3.11
  │ └── colors@1.0.3
  └─┬ winston-transport@4.4.1
    └─┬ logform@2.3.0
      └── colors@1.4.0
```

### 試す

~~該当バージョンの `colors` を読み込むだけで発症？します。~~ **npm 側が問題のあるバージョンを削除しました。**

当時：

```console
$ npm install colors@1.4.2
$ node
Welcome to Node.js v16.13.1.
Type ".help" for more information.
> require('colors')

(ｷﾞｬｰ)
```

~~`Ctrl+C` で止めて `Ctrl+D` で Node.js の REPL 終了です。~~

今：

```console
$ npm install colors@1.4.2
npm ERR! code ETARGET
npm ERR! notarget No matching version found for colors@1.4.2.
npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.
```

### Firebase CLI は直接ダウンロードできる

動かすだけならこれでも。

https://firebase.google.com/docs/cli

（日本語で読みたければ右上から言語選択してください。）

### もっと詳しく

azu さんの記事が出たのでそちらをどうぞ。

https://zenn.dev/azu/articles/d56615b2e11ad1

## おしまい

やんやは終わりました。ひとまずおつかれさまでした。

しかし色々つらいね……。