Verifiqué el tamaño de archivo de mi carpeta ./node_modules
y parece que moment.js es la biblioteca no C más pesada. 2,1 MB es bastante. Un vistazo rápido al tamaño de la carpeta muestra:
La mayor parte del peso proviene de la publicación de versiones comprimidas de moment.js con npm
, así como de la doble publicación de todas las configuraciones regionales. Pero los lugares por sí solos son bastante pesados por sí mismos.
Como tal, pensé que podría ser bueno para moment.js y la comunidad reducir esta cantidad.
./src
no se publique en npm
?./min
no se publique en npm
?./locales
a un paquete npm
separado para reducir el momento al mínimo?La gente usa el momento de diferentes maneras, y el consenso general es que el espacio en disco en una aplicación de nodo no es una prima de la misma manera que lo es en el navegador.
Dicho esto, no estoy seguro de qué está pasando exactamente en la carpeta min
:
No estoy seguro de por qué necesitamos moment-with-locales.min.js
en npm. Debería ser suficiente tener moment.min.js
y locales.min.js
, ¿verdad?
Además, no debería haber una necesidad de archivos no minimizados en una carpeta min
( locale.js
y moment-with-locales.js
).
La carpeta min realmente tiene un nombre incorrecto. Construido podría ser un nombre mejor. Pero ahí es donde viven los archivos moment-with-locales y locales hasta que ejecutamos la tarea de actualización del índice para su lanzamiento.
Ciertamente podríamos sacar los archivos moment-with-locales de npm específicamente, pero no estoy seguro de qué valor proporciona.
@martinheidegger, ¿ podría explicar en qué condiciones es un problema el tamaño de todo el paquete? El paquete crece a medida que la gente quiere más opciones para consumir la biblioteca. Si vamos a eliminar las cosas que enumera, necesitamos publicar paquetes separados que sean mínimos en algún aspecto, y luego publicar también un paquete grande que lo tenga todo.
¿Puede dar un ejemplo con otra biblioteca que reduzca todo al mínimo en algunas / todas sus compilaciones npm?
La instalación npm de lodash es de 1,4 MB, mientras que la minificada es de solo _69 KB_
El hecho de que lodash también publique cada función como un paquete propio solo conduce a una larga lista de paquetes que se instalan nuevamente, porque se hace referencia a ellos en otro paquete.
Cuando miro mi carpeta node_modules típica con un tamaño de alrededor de 300 MB, no estoy seguro de si vale la pena el esfuerzo de hacer que moment.js sea un poco más pequeño.
Y hay muchos más, eventos mucho más grandes, estos son solo algunos de ellos
Si bien realmente no me importa el tamaño del paquete npm, me sorprende que tenga que incluir 58 KB para las fechas manipuladas de una manera sensata (asumiendo que no necesito configuraciones regionales, que son mucho más pesadas) 😞
Estoy cansado de discutir este tipo de cosas. Pensé que una huella más baja haría que la instalación de mi paquete fuera más rápida (de los cuales es el momento más importante). Supongo que corro contra los molinos de viento. Entonces: kthxbye.
@martinheidegger prueba el hilo, al menos son más cuerdos que npm y almacenan el paquete en caché, por lo que no deberías dedicar tanto tiempo a las descargas :)
Estoy enfrentando el mismo problema. Hacer import moment from 'moment';
aumenta el tamaño del paquete de 30 kb a 250 kb !!! ¿Hay alguna solución fácil, chicos?
@ paramsingh88 Parece que la única opción es no usarlo. Encontré este hilo debido al mismo problema. El tamaño de mi proyecto aumenta en 58kB simplemente haciendo moment.unix(created).format('MMMM D, YYYY')
. ¡Absolutamente loco!
No entiendo esta actitud:
el espacio en disco en una aplicación de nodo no es una prima de la misma manera que lo es en el navegador.
El problema es que ese momento no es una aplicación de nodo, es una biblioteca que se puede usar en una aplicación de back-end o en la biblioteca de front-end. En este caso, sí, necesito usar Moment.js para validar las fechas en el front-end de la aplicación antes de enviarlas al backend (que tiene su propia validación separada).
El tamaño del momento sin locales es 50k (minificado), el tamaño con locales es de alrededor de 300k (minificado). Si desea hacer algo al respecto, consulte la discusión aquí https://github.com/moment/moment/issues/2373
Y si usa algún administrador de paquetes o lo que sea que esté complicando la vida, tráigalos también.
Disculpa, me equivoque. (editado)
el consenso general es que el espacio en disco en una aplicación de nodo no es una prima de la misma manera que lo es en el navegador
No creo que puedas construir una buena biblioteca con este tipo de mentalidad.
En el momento en que la gente se da cuenta de que el tamaño del paquete es un problema real y usted decide no hacer nada al respecto, moment
está muerto.
Para cualquiera que busque alternativas ligeras, date-fns
sería una excelente opción.
Hola, el momento npm es de aproximadamente 3 MB, sin embargo, esto afecta el tamaño de la herramienta de edición lambda en línea. encogerse definitivamente ayudaría
Usar esto en una aplicación angular comprimida con gzip termina siendo un 70% del tamaño de mis paquetes más pequeños. Sería fantástico si pudiéramos excluir las funciones que no necesitamos, ya que en este momento tengo que import * as moment from 'moment'
todo el paquete.
moment.js básicamente duplica el tamaño de la mayor parte de mi aplicación Angular:
Esto realmente duele en los dispositivos móviles.
@silentsnooc En tiempo de ejecución, se supone que debe cargar solo las configuraciones regionales que necesita. Entonces, la principal preocupación para usted es cargar archivos locales de forma diferida solo cuando los usa.
@kylekatarnls Si pudiera mostrar un ejemplo para aquellos de nosotros que usamos agrupadores, sería útil. Gracias.
El ejemplo de JSPM dado en el documento aquí:
https://momentjs.com/docs/#/i18n/loading -into-browser /
también funciona para webpack, y supongo que puede hacer el trabajo para otros paquetes.
No probado, pero este comentario tiene muchos me gusta:
https://github.com/moment/moment/issues/2517#issuecomment -185836313
Creo que momentos.js no estaba destinado a ser utilizado en la interfaz del navegador y no había planes por parte de los encargados de mantenimiento para hacerlo. Cuando nos topamos con un problema similar, terminamos usando date-fns
en el front-end y manteniendo momentos.js en el backend. Para un nuevo proyecto, vería si date-fns
podría usarse en ambos extremos.
@demisx No necesito ver más:
Gracias por la pista. : +1: También gracias a @xinghul que lo mencionó primero.
moment.js
Simplemente reemplazó momentjs con dayjs. Parece estar funcionando bien para mis propósitos y solo es alrededor de 15Kb con la configuración regional y el conjunto de complementos fromNow. Fantástico.
Diferencias de tamaño del paquete de aplicaciones Ionic 4 / Angular 8:
con momentJS
: agrega = 204 KB
con dayJS
: agrega = 6 KB
Solo necesito manipulaciones y formateo básico de datos / hora. Así que he decidido ir con dayJS
: https://github.com/iamkun/dayjs
También obtengo 249kb, no estoy seguro de si el colaborador va a hacer algo al respecto ... mudarse a date.fns
No probado, pero este comentario tiene muchos me gusta:
# 2517 (comentario)
Esto funcionó bien para todos los que buscan una optimización rápida.
Permití que mi momento pasara de 654.7kB a 178.4kB. Puede que aún sea grande, pero es una mejora.
Ojalá pudiéramos importar la función como date-fns.
Comentario más útil
No creo que puedas construir una buena biblioteca con este tipo de mentalidad.
En el momento en que la gente se da cuenta de que el tamaño del paquete es un problema real y usted decide no hacer nada al respecto,
moment
está muerto.Para cualquiera que busque alternativas ligeras,
date-fns
sería una excelente opción.