node-tar v7で破壊的な変更が加えられた件

#JavaScript#Node.js#TypeScript#Web開発#プログラミング#解説
投稿日:

node-tar 7では、従来のコードが動作しなくなる破壊的な変更が含まれています。この記事では、どのような変更が加えられたのか、既存のコードをどのように変更すればよいのかについて解説します。

node-tar 7の変更点

node-tarは、tarパッケージとしてnpmで提供されている、tarアーカイブを操作するためのライブラリです。

Terminal window
npm install tar

node-tar 7はTypeScriptベースになり、ES ModulesとCommonJSのデュアルパッケージになりました。その関係で、従来のコードが動作しなくなる破壊的な変更が含まれています。

コードの修正方法

ES Modulesの場合

ES Modulesの場合、従来は次のようなコードでnode-tarを利用できました。

example.js
// ES Modules
import tar from "tar";
tar.x({
file: "archive.tar.gz"
});

しかし、node-tar 7からは、上記のコードは動作しません。従来のコードを使用すると、TypeErrorが発生します。

Terminal window
await tar.x({
^
TypeError: Cannot read properties of undefined (reading 'x')

従来のコードは次のように修正する必要があります。

example.js
import tar from "tar";
import * as tar from "tar";
tar.x({
file: "archive.tar.gz"
});

または、次のように書くこともできます。

example.js
import { x as extract } from "tar";
extract({
file: "archive.tar.gz"
});

Tree Shakingによる最適化の恩恵を受けたい場合は、次のように書くと、最低限の関数のみをインポートできます。

example.js
import { extract } from "tar/x";
extract({
file: "archive.tar.gz"
});

CommonJSの場合

CommonJSの場合は、従来と同じコードが動作します。

example.js
// CommonJS
const tar = require("tar");
tar.x({
file: "archive.tar.gz"
});

TypeScriptの場合の注意点

node-tar 7は、従来のVanilla JSからTypeScriptベースに変わりました。従来はDefinitely Typedから型定義(@types/tarをインストールする必要がありましたが、node-tar 7からは型定義が同梱されているため、別途インストールする必要がなくなりました。

記事執筆時点では、Definitely Typedの型定義がnode-tar 7に対応していないため、コード補完が正しく動作しない可能性があります。不要になった型定義をアンインストールし、node-tarのビルトインの型定義を使用することをオススメします。

Terminal window
npm uninstall @types/tar

参考

Xに共有する Blueskyに共有する Misskeyに共有する LINEに共有する Threadsに共有する
著者のアイコン画像

生まれた時から、母国語よりも先にJavaScriptを使っていました。ネットの海のどこにもいなくてどこにでもいます。

Webフロントエンドプログラマーで、テクノロジーに関する話題を追いかけています。動画編集やプログラミングが趣味で、たまにデザインなどもやっています。主にTypeScriptを使用したWebフロントエンド開発を専門とし、便利で実用的なブラウザー拡張機能を作成しています。また、個人ブログを通じて、IT関連のニュースやハウツー、技術的なプログラミング情報を発信しています。