我看到这个库将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
插件应该足以让任何人排除其余不必要的东西预构建步骤
喜欢你为调查这个所做的工作,真诚的感谢你。
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 0.8.4 的发布,现在可以做到了! 今晚我会用它打开公关! :D
等待https://github.com/oliver-moran/jimp/pull/815以解决jimp 0.8.4
导入后的一些问题
这已经在3.1.5
版本中得到解决
最有用的评论
以下是关于如何配置 jimp 以减小尺寸的一些额外研究:
@jimp/custom
包作为从头开始添加插件的基础。 它的默认导出是一个configure
函数,它接受types
(支持的图像类型)和plugins
(要使用的插件)的数组。@jimp/types
导出包含在主jimp
包中的所有类型,从而可以轻松支持 node-vibrant 现在支持的相同图像。node-vibrant 似乎使用的唯一特殊插件是
resize
函数。 对应的插件是@jimp/plugin-resize
。@vibrant/image-node
包可以使用脚本顶部附近的以下内容进行更新: