Veo que esta biblioteca declara jimp
como una dependencia para realizar algunas transformaciones.
Estoy analizando las dependencias de mis proyectos (tengo node-vibrant
en mi package.json
y parece que jimp
necesito muchos espacios:
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
El punto es que jimp
incluye algún complemento por defecto:
--- /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
pero no estoy seguro de si todos los complementos son relevantes para node-vibrant
.
Quiero sugerir dos enfoques:
sharp
(mi solución favorita)
Como puede ver en mi paquete, también tengo sharp
como dependencia.
La principal diferencia entre ambos es que jimp
es 100% código javascript, mientras que sharp
delega en binarios de hijo.
La primera vez pensé que jimp
podría ser mejor ya que no tiene dependencias, pero la realidad es muy diferente: sharp
envían binarios preinstalados y el tamaño del paquete es en realidad mucho más pequeño de jimp
.
De hecho, sharp
perf es superior, consulte
http://sharp.pixelplumbing.com/en/stable/performance/
jimp
Supongo que dentro de 185 MB que jimp
está agregando allí, solo se usan algunas cosas.
No estoy seguro de cómo hacer eso desde node-vibrant
, pero por ejemplo, agregar una pequeña sección en README.md enumera explícitamente los complementos necesarios jimp
debería ser suficiente para que cualquiera excluya el resto de cosas no necesarias en un paso previo a la construcción
Me encanta el trabajo que has hecho para investigar esto, un sincero agradecimiento.
Es poco probable que sharp
sea una solución que podamos adoptar, ya que (a pesar del nombre) admitimos que el navegador ejecute node-vibrant
por sí solo.
Sin embargo, tiene toda la razón en que jimp
no es necesario para gran parte del uso de node-vibrant
. Actualmente estamos restringiendo el desarrollo para la base de código "estable" actual, estamos trabajando en una reescritura de la base de código a un monorepo (lo que significa que puede elegir lo que desea usar de node-vibrant
en el futuro también !) y he confirmado que es una optimización de tamaño que también podemos hacer allí.
Tengo una semana muy ocupada por delante, pero haré todo lo posible para volver el próximo fin de semana para hacer este cambio.
De lo contrario, siempre amamos y aceptamos solicitudes de extracción 👀
Noté otra cosa detrás de @jimp
: tienen core-js
como dependencia, ¡y esta dependencia se instala para cada complemento!
Es por eso que los tamaños de @jimp
son 185MB: core-js
toma 7.4MiB x 27 módulos = DEMASIADO ESPACIO.
Probablemente core-js
podría declararse de una manera que puedan compartir entre los complementos
Aquí hay algunas investigaciones adicionales sobre cómo se podría configurar jimp para reducir el tamaño:
El paquete @jimp/custom
actúa como una base para agregar complementos desde cero. Su exportación predeterminada es una función configure
que toma matrices de types
(tipos de imágenes compatibles) y plugins
(complementos para usar).
@jimp/types
exporta todos los tipos incluidos en el paquete principal jimp
, lo que facilita la compatibilidad con las mismas imágenes que ahora soporta el nodo vibrante.
El único complemento especial que nodo-vibrante parece usar es la función resize
. El complemento correspondiente es @jimp/plugin-resize
.
El paquete @vibrant/image-node
podría actualizarse con lo siguiente cerca de la parte superior del script:
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]
});
Parece que podría necesitar escribir algunas mecanografías, pero muchas gracias @NotWoods. Intentaré terminar esto esta semana
Las tipificaciones están tardando más de lo que pensaba originalmente. Sé que voy por el camino más largo, pero quiero asegurarme de que estoy arreglando el ecosistema y nuestras propias necesidades.
Los mecanografiados para jimp terminaron tomando un poco, pero es una buena contribución en sentido ascendente:
https://github.com/oliver-moran/jimp/pull/770
Después de fusionar esto, haré la optimización a node-vibrant
Con el lanzamiento de Jimp 0.8.4, ¡esto ahora se puede hacer! ¡Tendré un PR abierto esta noche con él! :D
Esperando https://github.com/oliver-moran/jimp/pull/815 para solucionar algunos problemas después de jimp 0.8.4
con la importación
Esto se ha resuelto a partir del lanzamiento de 3.1.5
Comentario más útil
Aquí hay algunas investigaciones adicionales sobre cómo se podría configurar jimp para reducir el tamaño:
El paquete
@jimp/custom
actúa como una base para agregar complementos desde cero. Su exportación predeterminada es una funciónconfigure
que toma matrices detypes
(tipos de imágenes compatibles) yplugins
(complementos para usar).@jimp/types
exporta todos los tipos incluidos en el paquete principaljimp
, lo que facilita la compatibilidad con las mismas imágenes que ahora soporta el nodo vibrante.El único complemento especial que nodo-vibrante parece usar es la función
resize
. El complemento correspondiente es@jimp/plugin-resize
.El paquete
@vibrant/image-node
podría actualizarse con lo siguiente cerca de la parte superior del script: