npmのoptionalDependenciesとは
ググってもあまり日本語の記事がヒットしないので簡単に説明を載せておきます。まれにpackage.json
でoptionalDependencies
というものにパッケージ名が指定されていることがあります。
"dependencies": {
...
},
"devDependencies": {
...
}
"optionalDependencies": {
"sharp": "0.26.3"
}
optionalDependenciesとは
optionalDependencies
は利用可能であればインストールされるが、利用不可であっても他の処理を止めたくない場合に使用します。
以下npm公式ドキュメントの引用です。
If a dependency can be used, but you would like npm to proceed if it cannot be found or fails to install, then you may put it in the optionalDependencies object. This is a map of package name to version or url, just like the dependencies object. The difference is that build failures do not cause installation to fail. Running npm install --no-optional will prevent these dependencies from being installed.
It is still your program's responsibility to handle the lack of the dependency.
optionalDependencies
に指定されているパッケージが見つからなかったり、インストールが失敗したりしても処理が継続されるということですね。
プログラムを提供する側は、そのパッケージのインストールが失敗したとしてもプログラムが問題なく動くように実装する必要があります。
optionalDependenciesの使用例
例えばNext.jsのpackage.jsonにはoptionalDependencies
としてsharp
が指定されています。
sharp
は画像最適化のためのnpmパッケージで、libvipsというネイティブライブラリに依存しているため、環境によってはインストール時にエラーが発生します。
Next.jsではImage Optimization (next/image)の部分でsharp
に依存していますが、この機能を使わないならsharp
がインストールされていなくても問題ありません。
「sharp
を使用できない環境であってもnext/image
を使わないならNext.js自体は使用可能にしたい」という意図からoptionalDependencies
に指定しているのだと考えられます。
Discussion