Node-vibrant: ライブラリのサイズを小さくする

作成日 2019年06月21日  ·  9コメント  ·  ソース: Vibrant-Colors/node-vibrant

このライブラリは、いくつかの変換を行うための依存関係としてjimpを宣言しているようです。

私は私が持っている(私のプロジェクトの依存関係を分析していますnode-vibrant私にpackage.jsonなどルックスjimpスペースの多くを必要とします:

ncdu 1.14 ~ Use the arrow keys to navigate, press ? for help
--- /deploy/out/node_modules ---------------
  185.0 MiB [##########] /<strong i="11">@jimp</strong>
   38.4 MiB [##        ] /chrome-aws-lambda
   34.2 MiB [#         ] /sharp
   11.0 MiB [          ] /<strong i="12">@browserless</strong>
   11.0 MiB [          ] /<strong i="13">@babel</strong>
    9.2 MiB [          ] /jimp
    6.3 MiB [          ] /core-js
    4.8 MiB [          ] /lodash
    3.2 MiB [          ] /jsdom
    3.1 MiB [          ] /moment
    3.0 MiB [          ] /iltorb
    2.4 MiB [          ] /colorable
    2.1 MiB [          ] /cssstats
    1.9 MiB [          ] /<strong i="14">@cliqz</strong>
    1.7 MiB [          ] /<strong i="15">@microlink</strong>
    1.7 MiB [          ] /graphql
    1.7 MiB [          ] /port-numbers
    1.7 MiB [          ] /node-vibrant

重要なのは、 jimpはデフォルトでいくつかのプラグインが含まれているということです。

--- /deploy/out/node_modules/<strong i="20">@jimp</strong> ---------
                         /..
    7.6 MiB [##########] /plugin-print
    7.0 MiB [######### ] /core
    6.9 MiB [######### ] /plugin-resize
    6.9 MiB [######### ] /plugin-color
    6.8 MiB [########  ] /plugin-crop
    6.8 MiB [########  ] /plugin-blur
    6.8 MiB [########  ] /plugin-rotate
    6.8 MiB [########  ] /png
    6.8 MiB [########  ] /custom
    6.8 MiB [########  ] /plugin-blit
    6.8 MiB [########  ] /plugin-contain
    6.8 MiB [########  ] /plugin-normalize
    6.8 MiB [########  ] /plugins
    6.8 MiB [########  ] /plugin-cover
    6.8 MiB [########  ] /plugin-gaussian
    6.8 MiB [########  ] /plugin-scale
    6.8 MiB [########  ] /bmp
    6.8 MiB [########  ] /plugin-mask
    6.8 MiB [########  ] /plugin-displace
    6.8 MiB [########  ] /jpeg

ただし、すべてのプラグインがnode-vibrant関連しているかどうかはわかりません。

2つのアプローチを提案したいと思います。

sharp使用を検討してください

(私のお気に入りの解決策)

私のバンドルでわかるように、依存関係としてsharpもあります。

両者の主な違いは、 jimpが100%javascriptコードであるのに対し、 sharp息子のバイナリに委任することです。

最初は、依存関係がないのでjimp方が良いと思いましたが、現実は大きく異なります。 sharpプリインストールされたバイナリを出荷し、パッケージサイズは実際には非常に小さいです。 jimp

実際、 sharpパフォーマンスが優れています。を参照してください。
http://sharp.pixelplumbing.com/en/stable/performance/

不要なjimp除外するだけです

jimpが追加されている185MBの内部では、実際に使用されているものはほんのわずかだと思います。

node-vibrantからそれを行う方法はわかりませんが、たとえば、README.mdに小さなセクションを追加すると、必要なjimpプラグインが明示的にリストされ、残りの不要なものを除外するのに十分なはずです。ビルド前の手順

enhancement

最も参考になるコメント

サイズを縮小するためにjimpを構成する方法に関する追加の調査を次に示します。

@jimp/customパッケージは、プラグインを最初から追加するためのベースとして機能します。 デフォルトのエクスポートはconfigure関数で、 types (サポートされている画像タイプ)とplugins (使用するプラグイン)の配列を取ります。

@jimp/typesは、メインのjimpパッケージに含まれるすべてのタイプをエクスポートするため、同じイメージのノードを簡単にサポートできるようになりました。

node-vibrantが使用していると思われる唯一の特別なプラグインresize関数です。 対応するプラグインは@jimp/plugin-resizeです。


@vibrant/image-nodeパッケージは、スクリプトの上部にある次のように更新できます。

import configure from '@jimp/custom';
import types from '@jimp/types'; // all of jimp's default types
import resize from '@jimp/plugin-resize'; // resize function

const Jimp = configure({
  types: [types],
  plugins: [resize]
});

全てのコメント9件

これを調査するために行った作業が大好きです。心から感謝します。

sharpは、(名前にもかかわらず)ブラウザがそれ自体でnode-vibrantを実行することをサポートしているため、私たちが採用できる解決策になる可能性は低いです。

ただし、 node-vibrantでの使用の多くには、 jimpは必要ないというのは絶対に正しいです。 現在、現在の「安定した」コードベースの開発を制限しており、コードベースをモノレポに書き直す作業を行っています(つまり、将来的にもnode-vibrantから使用したいものを選択できます。 !)そして、それがサイズの最適化であることを確認しました。

私の前には非常に忙しい週がありますが、この変更を行うために次の週末にループバックするために最善を尽くします

そうでなければ、私たちは常にプルリクエストを愛し、受け入れます👀

@jimp背後にある別のことにcore-jsがあり、この依存関係はすべてのプラグインごとにインストールされます。

そのため、 @jimpサイズは185MBです。 core-jsは7.4MiB x27モジュール=スペースが多すぎます。

おそらくcore-jsは、プラグイン間で共有できる方法で宣言できます。

サイズを縮小するためにjimpを構成する方法に関する追加の調査を次に示します。

@jimp/customパッケージは、プラグインを最初から追加するためのベースとして機能します。 デフォルトのエクスポートはconfigure関数で、 types (サポートされている画像タイプ)とplugins (使用するプラグイン)の配列を取ります。

@jimp/typesは、メインのjimpパッケージに含まれるすべてのタイプをエクスポートするため、同じイメージのノードを簡単にサポートできるようになりました。

node-vibrantが使用していると思われる唯一の特別なプラグインresize関数です。 対応するプラグインは@jimp/plugin-resizeです。


@vibrant/image-nodeパッケージは、スクリプトの上部にある次のように更新できます。

import configure from '@jimp/custom';
import types from '@jimp/types'; // all of jimp's default types
import resize from '@jimp/plugin-resize'; // resize function

const Jimp = configure({
  types: [types],
  plugins: [resize]
});

いくつかのタイピングを書く必要があるようですが、@ NotWoodsに大いに感謝します。 今週は終わらせてみます

当初思っていたよりもタイピングに時間がかかっています。 長い道のりを進んでいることはわかっていますが、エコシステムと私たち自身のニーズを確実に修正したいと思っています。

jimpの入力は少し時間がかかりましたが、上流での貢献は良好です。

https://github.com/oliver-moran/jimp/pull/770

これがマージされた後、 node-vibrant最適化します

Jimp 0.8.4のリリースにより、これを実行できるようになりました。 今夜はPRをオープンします! :NS

インポートでjimp 0.8.4後のいくつかの問題を修正するために、 https://github.com/oliver-moran/jimp/pull/815で待機してい

これは、 3.1.5リリースの時点で解決されています

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

chetstone picture chetstone  ·  14コメント

nitriques picture nitriques  ·  12コメント

amirping picture amirping  ·  6コメント

glomotion picture glomotion  ·  5コメント

lucafaggianelli picture lucafaggianelli  ·  9コメント