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

我想建议两种方法:

考虑使用sharp

(我最喜欢的解决方案)

正如你在我的包中看到的,我也有sharp作为依赖。

两者之间的主要区别是jimp是 100% javascript 代码,而sharp代表子二进制文件。

第一次我认为jimp可能会更好,因为它没有依赖项,但现实是如此不同: sharp预安装的二进制文件,而且包大小实际上太小了比jimp

事实上, sharp perf 更胜一筹,见
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 现在支持的相同图像。

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

但是,您完全正确的是, jimp中的大部分用法不需要node-vibrant 。 我们目前正在限制当前“稳定”代码库的开发,我们正在努力将代码库重写为 monorepo(这意味着您将来也可以从node-vibrant中选择您想要使用的内容!)并且我已经确认这是我们也可以在那里进行的大小优化。

我有一个非常忙碌的一周,但我会尽力在下周末回过头来做出这个改变

否则,我们总是喜欢并接受拉取请求👀

我注意到@jimp背后的另一件事:他们有core-js作为依赖项,并且每个插件都安装了这个依赖项!

这就是为什么@jimp大小为 185MB: core-js需要 7.4MiB x 27 个模块 = 太多空间。

可能core-js可以以它们可以在插件之间共享的方式声明

以下是关于如何配置 jimp 以减小尺寸的一些额外研究:

@jimp/custom包作为从头开始添加插件的基础。 它的默认导出是一个configure函数,它接受types (支持的图像类型)和plugins (要使用的插件)的数组。

@jimp/types导出包含在主jimp包中的所有类型,从而可以轻松支持 node-vibrant 现在支持的相同图像。

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 的发布,现在可以做到了! 今晚我会用它打开公关! :D

等待https://github.com/oliver-moran/jimp/pull/815以解决jimp 0.8.4导入后的一些问题

这已经在3.1.5版本中得到解决

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

lucafaggianelli picture lucafaggianelli  ·  9评论

stelasido picture stelasido  ·  15评论

amirping picture amirping  ·  6评论

eggers picture eggers  ·  3评论

glomotion picture glomotion  ·  5评论