node-tar v7で破壊的な変更が加えられた件
node-tar 7では、従来のコードが動作しなくなる破壊的な変更が含まれています。この記事では、どのような変更が加えられたのか、既存のコードをどのように変更すればよいのかについて解説します。
node-tar 7の変更点
node-tarは、tar
パッケージとしてnpmで提供されている、tarアーカイブを操作するためのライブラリです。
npm install tar
node-tar 7はTypeScriptベースになり、ES ModulesとCommonJSのデュアルパッケージになりました。その関係で、従来のコードが動作しなくなる破壊的な変更が含まれています。
コードの修正方法
ES Modulesの場合
ES Modulesの場合、従来は次のようなコードでnode-tarを利用できました。
1// ES Modules2import tar from "tar";3
4tar.x({5 file: "archive.tar.gz"6});
しかし、node-tar 7からは、上記のコードは動作しません。従来のコードを使用すると、TypeError
が発生します。
await tar.x({ ^TypeError: Cannot read properties of undefined (reading 'x')
従来のコードは次のように修正する必要があります。
1import tar from "tar";2import * as tar from "tar";3
4tar.x({5 file: "archive.tar.gz"6});
または、次のように書くこともできます。
1import { x as extract } from "tar";2
3extract({4 file: "archive.tar.gz"5});
Tree Shakingによる最適化の恩恵を受けたい場合は、次のように書くと、最低限の関数のみをインポートできます。
1import { extract } from "tar/x";2
3extract({4 file: "archive.tar.gz"5});
CommonJSの場合
CommonJSの場合は、従来と同じコードが動作します。
1// CommonJS2const tar = require("tar");3
4tar.x({5 file: "archive.tar.gz"6});
TypeScriptの場合の注意点
node-tar 7は、従来のVanilla JSからTypeScriptベースに変わりました。従来はDefinitely Typedから型定義(@types/tar
)をインストールする必要がありましたが、node-tar 7からは型定義が同梱されているため、別途インストールする必要がなくなりました。
記事執筆時点では、Definitely Typedの型定義がnode-tar 7に対応していないため、コード補完が正しく動作しない可能性があります。不要になった型定義をアンインストールし、node-tarのビルトインの型定義を使用することをオススメします。
npm uninstall @types/tar